首先,先说明下kernel各目录的功能。
目录 | 功能说明 |
---|---|
arch | 包含特定于CPU架构的代码,如处理器特定代码、中断处理和某些硬件抽象层。每个支持的CPU架构都有一个子目录,如arm、risc-v、x86等 |
block | 包含块设备驱动程序的代码,如硬盘驱动。这个目录实现了块设备的基本框架和块设备的I/O调度算法 |
crypto | 包含加密相关的代码,提供加密算法和哈希函数。这个目录用于实现各种密码学功能的子系统,包含了对称加密、非对称加密、哈希函数以及其他密码学算法的实现代码 |
documentation | 包含内核开发文档和规范。这些文档提供了对不同子系统、功能和接口的详细说明,以及编程指南、配置选项等信息 |
drivers | 设备驱动程序的源代码,按设备类型(如gpu、net、scsi、video等)进一步分类 |
firmware | 用于存放一些硬件设备所需的固件文件。固件是一种特殊类型的软件,包含了驱动设备所需的指令、数据和配置信息,帮助设备正确地进行初始化和操作 |
fs | 包含不同文件系统的实现,如ext4、fat、ntfs、ubifs等。这个目录是整个文件系统层次结构的核心部分,提供了与文件和目录操作、磁盘管理、文件系统接口等相关的功能 |
include | 包含内核的头文件,这些头文件被内核的其他部分和编译内核模块时使用 |
init | 包含初始化程序的代码,负责在系统启动时执行初始化任务。内核初始化入口函数start_kernel就是在这个目录下的文件main.c内实现的 |
ipc | 包含进程间通信(IPC)相关的代码。这个目录用于实现System V的进程间通信模块 |
kernel | 包含内核核心功能和系统调用的实现。这个目录中的代码实现了系统的核心模块的主体框架,如进程管理、进程调度器、中断处理、系统时钟管理、同步机制等 |
lib | 包含内核使用的库文件,如数学库和其他辅助功能。这些库文件为内核提供了一些基本的函数和数据结构 |
mm | 含内存管理相关的代码。这个目录实现了内存管理的各种算法和数据结构,如分页模型的框架、伙伴算法的实现和对象缓冲器slab的实现代码等 |
net | 包含网络子系统的代码,实现网络协议和网络设备驱动。这个目录包含了网络子系统相关的代码,如协议栈、驱动程序等 |
samples | 包含内核编程的示例代码。这些示例代码可以帮助开发者了解如何使用内核提供的API和接口进行编程 |
scripts | 包含用于内核配置、编译和测试的脚本。这些脚本为开发者提供了方便的工具来配置、编译和测试内核 |
secuity | 包含安全相关的代码,如强制访问控制(MAC)框架。这个目录用于存放安全框架的实现代码,如SELinux、AppArmor等 |
sound | 包含声音子系统的代码。这个目录用于存放声音系统架构相关代码和具体声卡的设备驱动程序 |
tools | 包含用于内核开发和测试的工具。这些工具可以帮助开发者进行内核调试、测试和分析等工作 |
usr | 某些Linux源码版本中可能包含此目录,用于存放用户空间工具和库的源代码。但请注意,并不是所有Linux源码版本都会包含此目录 |
virt | 包含虚拟化技术相关的代码。这个目录用于实现虚拟化技术的相关功能,如虚拟机管理、虚拟设备驱动等 |
直接开始下一小节: 文件系统构建说明