Linux源代码目录结构说明
系统核心组件:
Linux源代码目录结构示意图:
图:linux源代码目录结构示意图(一) scripts目录: 该目录中不包含任何核心代码,该目录下存放了用来配置内核的脚本和应用程序源码。
(二) Lib目录:
该目录主要分两部分:gnuzip加压缩算法,用于在系统启动过程中将压缩的内核镜像解压缩;剩余的文件用于实现一个C库的子集,主要包括字符串和内存操作等相关函数。
(三) Mm目录:
该目录主要包含了和体系结构无关的内存管理代码,包括通用的分页模型的框架、伙伴算法的实现和对象缓冲器slab的实现代码。这些代码最终依赖具体的平台完成相关操作。
(四) Include目录:
这 个目录包含linux源代码目录树中绝大部分头文件,每个体系架构都在该目录下对应一个子目录,该子目录中包含了给定体系结构所必需的宏定义和内联函数。 这些内联函数很多都是适用汇编语言实现的,而且在编译内核的过程中,首先会建立一个名称为include/asm的符号链接,该链接指向目标体系结构在该 目录中的子目录,使得与体系结构无关内核代码可以使用如下简洁的形式来引用语体系结构相关的代码为:
#include “Linux/asm/xxx.h”除 了与体系结构相关的头文件之外,该目录还用与存放于体系架构无关的内核模块的头文件,这些头文件都是某一个内核模块对外提供的接口,供内核其他模块使用。 这些接口主要包含进程管理访问接口、内存管理访问接口、文件操作访问接口、网络访问接口等,这些接口函数通常用于内核模块的编写,如编写设备驱动程序或者 设计一个新的文件系统等。
(五) Init目录:
该目录中存放的是系统核心初始化代码,内核初始化入口函数 start_kernel就是在该目录下的文件main.c内实现的。内核初始化入口函数start_kernel负责调用其它模块的初始化函数,完成系 统的初始化工作。该目录种存放的代码还负责测试CPU性能,算出系统处理器的BogoMIPS值 [w1] ,该值代表了处理器在一定时间执行循环操作的次数。除此之外,该目录还负责完成根文件系统初始化过程中的相关工作。
(六) Kernel目录:
该 目录存放的是linux内核的最核心代码,用于实现系统的核心模块,这些模块包括进程管理、进程调度器、中断处理、系统时钟管理、同步机制等。该目录中的 代码实现了这些核心模块的主体框架,独立于具体的平台和系统架构。核心模块与平台相关代码存放在目录arch中,具体看后面对该目录的介绍。
(七) Arch目录:
该目录中每个子目录都与某种体系结构对应,用于存放系统结构相关代码,向平台无关的系统核心模块提供所需的功能接口。每个体系结构对应的子目录下通常至少包含以下几个子目录:
Kernel子目录:用于存放特定体系结构特有信号量的实现代码和对称多处理器(Symmetric MultiProccessing,简称SMP)相关模块。
Lib子目录:用于存放以来依赖当前体系结构的辅助功能,如利用当前体系结构特性实现的strlen和memcpy内存操作函数;与通用的实现方法相比,他们的开销小、更加高效。
Mm子目录:用于存放体系架构特定的内存管理模块,包括内存的初始化、页表管理等内容。
Boot子目录:该目录中包含了当前平台上系统引导过程使用的部分或全部代码。这部分代码以来当前平台,用于完成向系统内存装载内核镜像的工作。
系统次核心组件:
Block目录:该目录用于实现块设备的基本框架和块设备的I/O调度算法。
Usr目录:该目录中的代码为内核尚未完全启动时执行用户空间代码提供了支持。
Ipc目录:用于实现System V的进程间通信(Inter Process Communication,IPC)模块。
Driver目录:用于存放各类设备的驱动程序。
Sound目录:存放声音系统架构相关代码和具体声卡的设备驱动程序。
Secturity目录:用于存放安全框架的实现代码
Crypto目录:用于存放相关的加密算法
Documentation目录:文档目录
[w1]MIPS:million instructions per second就是指每秒运行多少百万条指令数。Bogo就是伪,bogoMIPS就是伪MIPS。这是linux中的测量处理器的性能。实现该功能的函数就bogoMips