Linux源码编译(一):从头文件说起

在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结,但其中的每一个细节要点都值得花费很多时间去研究,比如X window架构,驱动模块,文件系统的实现等。对于细节,只能靠大家自己去沉淀和深究,本博客旨在从全局概念上让大家对Linux有更多的认知,系列文章讲完后,希望留给大家的感觉是:不再害怕Linux。

在这一节里,主要和大家理一理Linux下头文件方面的杂碎,从大的方向说,Linux下编程分为两块:
  1). 内核开发
  2). 用户空间程序开发

 
1. 内核空间头文件
对于 Linux kernel的程序开发,主要使用C语言,当然汇编语言也是举足轻重,Kernel的开发主要针对哪些方面呢?
  1). 硬件驱动模块
  2). 内核性能的增强
  3). 内核的新功能、新特性
  4). 内核bug的fix
  ......

无论是哪一方面的内核开发,使用的都是内核自身的头文件,而内核的头文件主要有两个目录位置:
Linux源码编译(一):从头文件说起_第1张图片

当然,除了asm和 linux 这两个主要的头文件目录,还有诸如/usr/include/drm,/usr/include/video,/usr/include/sound等驱动相关的头文件目录。

总之,如果是从事内核开发的话,所有引用的头文件均是来自内核本身,绝不可能使用用户空间的头文件,比如"glibc",“libstdc++"等头文件的引用是不可能出现在内核程序中的。


2. 用户空间头文件
用户空间的头文件杂乱纷繁,随便一个应用程序,几乎都有自己维护的头文件,但尽管如此,有一些最基本、相对底层的头文件或库函数是开发应用程序的基础。

比如,如果想在用户空间编写C语言程序,那么使用的最基本的C库和头文件是由glibc提供的;想在用户空间编写C++程序,其使用的基本库和头文件又是来自于libstdc++。

对于glibc,不仅仅提供了标准的C库,如fopen(), fclose()等, 而且还提供了和内核空间打交道的相关库,如open(), close()等。

不管是glibc提供的C库,还是由libstdc++提供的C++库,想要编写GUI窗口程序,显然不太现实,于是,有了著名的基于C语言的GTK+库和基于C++语言的QT库,这些相对上层的库所做的事情就是为了方便编写GUI程序,对C和C++封装了一层。

Linux源码编译(一):从头文件说起_第2张图片

除了上面这些编程相关的库或头文件,Linux环境中编程还有很多编程语言,比如Java,Python等。


3. 所谓跨平台
 1). 跨平台一般分为:
      跨硬件平台:比如Linux内核,即能在x86上运行,也能在ARM或Android上运行
      跨系统平台:即能在Linux系统下运行,也能在Windows系统下运行,比如firefox
      跨硬件跨系统:比如Java程序,可以在不同的体系结构,也可以在不同的系统平台运行

 2). Window环境中重新编译,才能运行,其原理是使用标准库编写程序,从而实现跨平台:
      glibc:Linux标准C库
      libstdc++:Linux标准C++库

 3). Windows环境中重新编译,才能运行,其原理是统一不同系统平台的链接库,从而实现跨平台:
      GTK+:基于C语言的GUI库
      Qt: 基于C++的GUI库

 4). Windows环境中不需要重新编译,一次编译,到处运行:
      Java,使用JVM虚拟机统一不同的链接库和不同的平台,从而实现跨平台。



http://blog.chinaunix.net/uid-26838492-id-3170998.html

你可能感兴趣的:(Linux源码编译(一):从头文件说起)