linux kernel v2.6.15.5代码目录树

linux kernel 结构

image

1. scripts

该目录中并没有包含任何核心代码,该目录下存放了用来配置内核的脚本和应用程序源码。当输入 make menuconfig 或者 make xconfig 之类命令进行内核配置时,会首先编译应用程序的源码、生成可执行文件,然后运行;该可执行文件接着读取当前体系结构对应子目录树中的 Kconfig 文件开始对内核进行配置;在配置完成后会在当前内核源代码根目录中生成一个.config 文件。除此之外,这些脚本还负责提取可执行内核镜像 vmLinux 的符号表信息、存入到文件 System.map 中,供内核调试使用。

2. lib

该目录主要包含两部分内容: gnuzip 解压缩算法,用于在系统启动过程中将压缩的内核景象解压缩;剩余的文件用于实现一个C 库的子集,主要包括字符串和内存操作等相关函数。

3. mm

该目录包含了体系结构无关的内存管理代码。这里包括通用的分页模型的框架,伙伴算法的实现和对象缓冲器 slab 的实现代码。这些代码最终依赖于具体的平台完成相关的操作。

4. include

这个目录包含了 Linux源代码目录树中绝大部分头文件,每个体系架构都在该目录下对应一个子目录,该子目录中包含了给定体系结构所必须的宏定义和内联函数。这些内联函数很多都是全部或部分地使用汇编语言实现的,而且在 C 或者汇编代码中都会应用到这些文件。在编译内核的过程中,编译过程首先会建立一个名称为 include/asm 的符号链接,该链接指向目标体系结构在该目录中的子目录;使得与
体系结构无关内核代码可以使用如下简洁的形式来引用与体系结构相关的代码(这里是引用名称为 xxx.h 的头文件)。

#include "Linux/asm/xxx.h"

除了包含与体系结构相关代码的头文件之外,该目录还用于存放与体系架构无关内核模块的头文件,这些头文件都是某一个内核模块对外提供的接口、供内核其他模块使用。这些接口主要包含进程管理访问接口,内存管理访问接口,文件操作访问接口,网络访问接口等。这些接口函数通常用于内核模块的编写时,如设备驱动程序或者你设计的一个新的文件系统等。

5. init

该目录中存放的是系统核心初始化代码,内核初始化入口函数 start_kernel 就是在该目录中的文件 main.c 内实现的。内核初始化入口函数 start_kernel负责调用其他模块的初始化函数,完成系统的初始化工作。该目录中存放的代码还负责测算 CPU性能,算出系统处理器的 BogoMIPS值,该值代表了处理器在一定时间执行循环操作的次数;除此之外,该目录中的代码还负责完成根文件系统初始化过程中的相关工作。

6. kernel

该目录中存放的是 Linux 内核的最核心部分代码,用于实现的系统的核心功能;这些功能包括:进程管理,进程度器,中断处理,系统时钟管理,同步机制等。它们与具体的平台和体系架构无关的部分与平台相关部分代码存放在目录 arch 之中,请看下面对该目录的介绍。

7. arch

该目录中的每个子目录中都与某一种体系结构相对应,用于存放体系架构相关代码、向平台无关系统核心模块提供所需要的功能接口。每个体系结构对应的子目录下通常至少包含以下几个子目录:
- kernel,用于存放特定体系结构特有的信号量的实现代码和对称多处理器(Symmetric MultiProcessing,简称 SMP)相关模块。
- lib,用于存放依赖于当前特定体系结构中的辅助功能,如利用当前体系结构的特性实现的 strlen 和 memcpy内存操作函数;与通用的实现方法相比,它们的开销小、更加高效。
- mm,用于存放体系结构特定的内存管理模块,包括内存的初始化、页表管理等内容。
- boot,该目录中包含了当前平台上系统引导过程使用的部分或全部代码。这部分的代依赖于当前的平台,用于完成向系统内存的装载内核镜像的工作。图中右侧部分是内核的他模块,这些模块用于实现相对不是很重要的内核模块。从图中的 net 和 fs目录可以看出 Linux 内核支持众多的文件系统和网络协议,这也是 Linux取得成功的原因之一。

下面对这些目录的用途进行扼要的介绍。
- 目录 block 用于实现块设备的基本框架,用于实现块设备的 I/O 调度算法。
- 目录 usr 中的代码为内核尚未完全启动时执行用户空间代码提供了支持。
- 录 ipc 中 的 文 件 用 于 实 现 System V 的 进 程 间 通 讯 (InterProcessCommunication,简称 IPC)模块。
- 目录 driver 中用于存放各类设备的驱动程序。
- 目录 sound 存放了和声卡相关的架构和设备驱动程序。
- 目录 secturity 中存放了 Security-Enhanced Linux(简称 SELinux)安全框架的实现代码。
- 目录 crypto 中存放了相关的加密算法的代码。
- 目录 Documentation 中存放了与内核相关的为数不多的文档,在该目录下
有一些相当优秀而且相当完整的文档;在这里你可以不时的发现自己所最
需要的东西。

猜你喜欢

转载自blog.csdn.net/u011559046/article/details/79440383