Linux内核代码以源码树的形式存放,如果在安装系统的时候已经安装了源码树,其源码树就在/usr/src/linux下,源码树结构如图4.2所示。
(点击查看大图)图4.2 Linux内核源码树结构 |
下面分别针对图4.2中各个部分进行介绍,各个目录的主要的功能分别如下。
1.arch目录
arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如arm子目录是关于ARM平台下各种芯片兼容的代码。
2.include目录
include子目录包括内核编译时所需要的大部分头文件。与平台无关的头文件在include/linux子目录下,include/scsi目录则是有关scsi设备的头文件目录,与arm相关的头文件在include/asm-arm子目录下。
3.drivers目录
drivers子目录放置系统所有的设备驱动程序。有些驱动是与硬件无关的,而有些驱动是与硬件平台相关。例如,在USB驱动中,主机控制器有3种规格:
OHCI主要为非PC系统上及带有SiShe ALi芯片组的PC主板上的USB芯片,嵌入式系统一般使用该驱动。
UHCI大多为Intel和Via主板上的USB控制器芯片。相对OHCI而言UHCI的硬件电路比较简单,同时其成本也比较低,但驱动复杂,但它们都是在USB 1.1规范同时提出的。
EHCI由USB 2.0规范所提出,它兼容OHCI和UHCI。
4.fs目录
fs子目录列出了Linux支持的所有文件系统,目前Linux支持ext2、vfat、ntfs、yaffs2、ramfs、cramfs和romfs等多种文件系统。在嵌入式系统中常用的闪存设备的文件系统有cramfs、romfs、ramfs、jffs2、yaffs等文件系统。
5.init目录
init子目录包含核心的初始化代码(注意,不是系统的引导代码)。它包含两个文件main.c和version.c,这是研究核心如何工作的一个非常好的起点。
6.ipc目录
ipc子目录包含核心进程间的通信代码。Linux下进程间通信机制主要包括管道、信号、消息队列、共享内存、信号量、套接口。
7.kernel目录
kernel子目录包含内核管理的核心代码。与处理器结构相关代码都放在arch/*/kernel目录下。
8.net目录
net子目录里是核心的网络部分代码,其每个子目录存放一个具体的网络协议或者网络模型代码。
9.mm目录
mm子目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。
10.scripts目录
scripts子目录包含用于配置核心的脚本文件。
11.lib目录
lib子目录包含了核心的库代码,与处理器结构相关的库代码被放在arch/*/lib/目录下。