Linux源码 头文件
阅读数:257 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
Linux内核源码中的头文件非常多,它们定义了各种结构体、宏、函数原型等,以供内核自身以及内核模块使用。
二、主要头文件
-
include/
: 这是最主要的头文件目录,包含了大量的子目录,每个子目录通常代表了内核的不同部分或者功能。例如:include/linux/
:定义了内核中用到的各种核心结构和函数。include/net/
:包含了网络子系统的结构和函数。include/asm/
:包含了特定于体系结构的定义(通常是一个链接到特定架构的目录,如include/asm-x86/
)。include/uapi/
:包含了用户空间API的定义,这些定义也可被用户空间的程序使用。
-
arch/
: 包含了特定于不同硬件架构的代码和头文件。每个支持的架构,如x86、ARM或MIPS,都有自己的子目录。例如:arch/x86/
:包含了x86架构特有的代码和头文件。arch/arm/
:包含了ARM架构特有的代码和头文件。
-
drivers/
: 包含了内核中各种设备驱动的代码和头文件。这些头文件通常是特定于某个驱动或驱动类别的。例如:drivers/net/
:网络设备驱动的头文件。drivers/gpu/
:图形处理单元(GPU)驱动的头文件。
-
fs/
: 包含了文件系统相关的头文件,定义了文件系统的接口和结构。 -
kernel/
: 包含了与内核核心功能相关的头文件。 -
mm/
: 包含了与内存管理相关的头文件。 -
ipc/
: 包含了与进程间通信(IPC)相关的头文件。 -
crypto/
: 包含了与加密算法相关的头文件。 -
block/
: 包含了块设备相关的头文件。
三、与体系结构相关的头文件
Linux内核根据与体系结构的关系,可以分为以下三大类头文件:
1.<linux/xxx.h>:Linux内核标准头文件,与体系结构无关,位于内核源码顶层include目录中。
2.<asm/xx.h>:与体系结构(CPU Core)相关的头的文件,位于体系结构目录下的include目录中,比如ARM,则位于arch/arm/include.
3.<mach/xx.h>:与具体的机器machine/板子(SOC)系统相关的头文件,位于某一系统结构(CPU Core)相关的特定SOC/machine所在目录下的include目录中。比如对于Atmel SAM91系统的SOC/machine,则相关的头文件位于arch/arm/amch-at91/include中。
内核在编译过程中会将以上三个目录include, arch/${ARCH}/include, arch/${ARCH}/mach-xxx/include作为默认的头文件目录进行搜索。
还有一些其他情况,比如对于三星的SOC,除了mach-xx目录外,还有一个平台(platform)相关的目录,在其中包含了所有三星的SOC共有的平台相关的代码和头文件,这些目录名以plat开头,相关的头文件在arch/arm/plat-samsung/include中,在编程时用<plat/xx.h>方式包含。
与底层硬件相关性由大到小:
mach>plat>asm.