参照:嵌入式 Linux 内核修炼之道 下面针对 2.6.23 版本进行简单描述。 (1)Documentation。 这个目录下面没有内核代码,只有很多质量参差不齐的文档,但往往能够给我们 提供很多的帮助。 (2)arch。 所有与体系结构相关的代码都在这个目录以及 include/asm-*/目录中,Linux 支持 的每种体系结构在 arch 目录下都有对应的子目录,而在每个体系结构特有的子目录下 又至少包含 3 个子目录。 kernel:存放支持体系结构特有的诸如信号量处理和 SMP 之类特征的实现。 lib:存放体系结构特有的对诸如 strlen 和 memcpy 之类的通用函数的实现。 mm:存放体系结构特有的内存管理程序的实现。 除了这 3 个子目录之外,大多数体系结构在必要的情况下还有一个 boot 子目录, 包含了在这种硬件平台上启动内核所使用的部分或全部平台特有代码。 此外,大部分体系结构所特有的子目录还根据需要包含了供附加特性使用的其他 子目录。比如,i386 目录包含一个 math-emu 子目录,其中包括了在缺少数学协处理 器(FPU)的 CPU 上运行模拟 FPU 的代码。 (3)drivers。 这个目录是内核中最庞大的一个目录,显卡、网卡、SCSI 适配器、PCI 总线、 USB 总线和其他任何 Linux 支持的外围设备或总线的驱动程序都可以在这里找到。 (4)fs。 虚拟文件系统(VFS,Virtual Fil e System)的代码,和各个不同文件系统的代码 都在这个目录中。Linux 支持的所有文件系统在 fs 目录下面都有一个对应的子目录。 比如 ext2 文件系统对应的是 fs/ext2 目录。 一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。存储设备可能 是本地的物理上可访问的,比如硬盘或 CD-ROM 驱动器,它们分别使用 ext2/ext3 和 isofs 文件系统;也可能是通过网络访问的,使用 NFS 文件系统。 还有一些虚拟文件系统,比如 proc,它以一个标准文件系统出现,然而,它其中 的文件只存在于内存中,并不占用磁盘空间。 (5)include。 这个目录包含了内核中大部分的头文件,它们按照下面的子目录进行分组。 include/asm-*/,这样的子目录有多个,每一个都对应着一个 arch 的子目录,比如 include/asm-alpha、include/asm-arm、include/asm-i386 等。每个子目录中的文 件都定义了支持给定体系结构所必须的预处理器宏和内联函数,这些内联函 数多数都是全部或部分使用汇编语言实现的。 编译内核时,系统会建立一个从 include/asm 目录到目标体系结构特有的目录的符 号链接。比如对于 arm 平台,就是 include/asm-arm 到 include/asm 的符号链接。因此, 体系结构无关部分的内核代码可以使用如下形式包含体系相关部分的头文件。 #include <asm/some-file> include/linux/,与平台无关的头文件都在这个目录下面,它通常会被链接到目录 /usr/include/linux(或者它里面的所有文件会被复制到/usr/i nclude/linux 目录 下面)。因此用户应用程序里和内核代码里的语句: #include <linux/some-file> 包含的头文件的内容是一致的。 include 目录下的其他子目录,在此不做赘述。 (6)init。 内核的初始化代码。包括 mai n.c、创建早期用户空间的代码以及其他初始化代码。 (7)ipc。 IPC,即进程间通信(interprocess communication)。它包含了共享内存、信号量 以及其他形式 IPC 的代码。 (8)kernel。 内核中最核心的部分,包括 进程的调度(kernel/sched.c),以及进程的创建和 撤销(kernel/fork.c 和 kernel /exit.c)等,和平台相关 的另外一部分核心的代码在 arch/*/kernel 目录。 (9)lib。 库代码,实现了一个标准 C 库的通用子集,包括字符串和内存操作的函数(strlen、 mmcpy 和其他类似的函数)以及有关 sprintf 和 atoi 的系列函数。与 arch/lib 下的代码 不同,这里的库代码都是使用 C 编写的,在内核新的移植版本中可以直接使用。 (10)mm。 包含了体系结构无关部分的内存管理代码,体系相关的部分位于 arch/*/mm 目录 下。 (11)net。 网络相关代码,实现了各种常见的网络协议,如 TCP/IP、IPX 等。 (12)scripts。 该目录 下没有内 核代码 ,只包含 了用来 配置内核的 脚本文 件。当运 行 make menuconfi g 或者 make xconfig 之类的命令配置内核时,用户就是和位于这个目录下的 脚本进行交互的。 (13)block。 block 层的实现。最初 block 层的代码一部分位于 drivers 目录,一部分位于 fs 目 录,从 2.6.15 开始,block 层的核心代码被提取出来放在了顶层的 block 目录。 (14)crypt o。 内核本身所用的加密 API,实现了常用的加密和散列算法,还有一些压缩和 CRC 校验 算法。 (15)security。 这个目录包括 了不同的 Linux 安全模型的代码,比如 NSA Securit y-Enhanced Linux。 (16)sound。 声卡驱动以及其他声音相关的代码。 |
|
来自: ____足迹____ > 《linux 内核》