linux-5.15.107 源码下载链接:https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.107.tar.gz
下载解压后如下图:

目录名 | 主要作用 |
arch | 存放体系结构相关的代码 (如 x86, ARM, MIPS 等) |
block | 块设备层代码,I/O 调度 |
certs | 内核模块签名和验证的证书和密钥 |
crypto | 内核加密框架和加密算法实现 |
Documentation | 内核官方文档 |
drivers | 各种设备驱动程序 (如网络、显卡、USB、PCI 等) |
fs | 虚拟文件系统 (VFS) 和各种具体文件系统 (如 Ext4, XFS, procfs) |
include | 内核头文件,定义数据结构、宏和函数原型 |
init | 内核初始化和启动代码 |
ipc | 进程间通信 (IPC) 机制实现 (如 System V IPC, POSIX IPC) |
kernel | 内核核心代码 (进程管理、调度、时间、信号、锁机制等) |
lib | 内核通用库函数和辅助例程 (字符串操作、CRC、压缩等) |
mm | 内存管理子系统 (页分配、slab 分配器、虚拟内存、交换等) |
net | 内核网络协议栈实现 (TCP/IP, socket, Netfilter 等) |
samples | 演示内核特性或 API 用法的示例代码 |
scripts | 内核编译、配置、维护和开发的脚本和工具 |
security | Linux 安全模块 (LSM) 框架和安全模型实现 (如 SELinux, AppArmor) |
sound | 声音子系统 (ALSA 核心和声卡驱动) |
tools | 内核开发和调试相关的用户空间工具 (如 perf, bpftool) |
usr | 主要用于生成 initramfs 的相关支持 |
virt | 虚拟化技术相关的代码 (如 KVM, Xen 客户机支持, Virtio) |
arch
:- 作用: 存放体系结构相关的代码。我们知道 Linux 是一个支持多种处理器架构的操作系统,例如 x86 (i386, x86_64), ARM (arm, arm64), MIPS, PowerPC, RISC-V, s390 等。此目录下的每一个子目录都对应一种或一类特定的 CPU 架构。
- 内容: 包含了特定架构的引导代码、内存管理实现、中断处理、CPU 特性相关的代码、系统调用实现细节以及特定于该架构的驱动程序等。例如,
arch/x86
包含了针对 Intel 和 AMD 等 x86 架构处理器的代码,而arch/arm64
则包含了针对 64 位 ARM 架构的代码。
block
:- 作用: 包含块设备层的代码。块设备是指以固定大小的数据块(block)进行数据读写的设备,如硬盘、固态硬盘 (SSD)、U 盘等。
- 内容: 实现了块设备的请求队列、I/O 调度算法(例如 CFQ, Deadline, NOOP)、块设备驱动的通用接口和辅助函数等。它为文件系统和底层块设备驱动之间提供了一个抽象层。
certs
:- 作用: 存放用于内核模块签名和验证的证书和密钥相关的代码。
- 内容: 包含了在内核编译时用于签署内核模块的 X.509 证书和私钥。当启用了模块签名验证功能时,内核会使用这些证书来验证加载的模块是否可信,以增强系统安全性。
crypto
:- 作用: 内核加密框架的所在地。它为内核的其他部分(如 IPsec 网络、dm-crypt 块设备加密、文件系统加密等)提供加密算法和 API。
- 内容: 实现了各种对称加密算法 (如 AES, DES)、哈希算法 (如 SHA1, MD5)、公钥加密算法、随机数生成器以及相关的 API 接口。它允许硬件加密加速器的集成。
Documentation
:- 作用: 包含内核的官方文档。这是理解内核各个子系统、API、配置选项、开发流程等的重要参考资料。
- 内容: 文档以 reStructuredText (RST) 格式编写,涵盖了内核的方方面面,包括内核参数、特定驱动程序的说明、内核内部机制的解释、如何为内核贡献代码等。可以使用 Sphinx 等工具将其编译成 HTML 或 PDF 等易于阅读的格式。
drivers
:- 作用: 这是内核源代码中最大的目录之一,包含了所有设备驱动程序的代码。驱动程序是内核与硬件设备之间沟通的桥梁。
- 内容: 按照设备类型进行了分类,例如:
char/
: 字符设备驱动 (如串口、终端)。block/
: (此目录下的drivers/block
存放具体的块设备驱动,而顶层的block
目录是块设备层核心代码)。net/
: 网络设备驱动 (如有线网卡、无线网卡)。gpu/
: 图形处理器 (GPU) 驱动。hid/
: 人机接口设备 (HID) 驱动 (如键盘、鼠标)。i2c/
,spi/
,usb/
,pci/
: 各种总线驱动和连接到这些总线的设备驱动。staging/
: 一些尚未完全成熟或正在开发中的驱动程序,等待合并到更稳定的位置。
fs
:- 作用: 包含了虚拟文件系统 (VFS) 的实现以及各种具体文件系统的代码。VFS 是一个抽象层,使得用户程序可以用统一的方式与不同类型的文件系统进行交互。
- 内容: VFS 核心代码 (如
inode.c
,file.c
,dcache.c
等) 和各种文件系统实现 (如 Ext4, XFS, Btrfs, NTFS, FAT, procfs, sysfs 等)。每个文件系统都在此目录下有其对应的子目录。
include
:- 作用: 包含内核的头文件。这些头文件定义了内核使用的数据结构、宏、函数原型等。
- 内容:
include/linux/
: 大部分内核通用的头文件。include/uapi/
: (User API) 暴露给用户空间的头文件,定义了内核与用户空间程序交互的接口 (如系统调用号、ioctl 命令等)。include/asm-generic/
: 通用的汇编相关头文件。- 特定架构的头文件会通过
arch/<architecture>/include/asm
链接或包含进来。
init
:- 作用: 包含内核的初始化和启动代码。
- 内容:
main.c
文件是内核启动的起点 (在架构相关的引导代码之后),负责初始化内核的各个子系统,如调度器、内存管理、VFS 等。还包括do_mounts.c
(挂载根文件系统) 等。
ipc
:- 作用: 包含进程间通信 (Inter-Process Communication, IPC) 机制的实现。
- 内容: 实现了 System V IPC (如消息队列、信号量、共享内存) 和 POSIX IPC (如 POSIX 消息队列) 的内核部分。
kernel
:- 作用: 包含内核的核心代码,主要涉及进程管理、调度、时间管理、信号处理、内核同步机制等。
- 内容:
sched/
: 进程调度器代码。time/
: 时间管理、定时器相关的代码。signal.c
: 信号处理。fork.c
: 进程创建 (fork, clone)。locking/
: 内核锁机制 (如自旋锁、互斥锁)。printk.c
: 内核打印函数printk
的实现。trace/
: 内核跟踪和事件记录 (如 ftrace)。
lib
:- 作用: 包含内核使用的一些通用库函数和辅助例程。
- 内容: 实现了字符串操作 (如
strcpy
,strlen
)、位操作、CRC校验、压缩/解压缩算法 (如 zlib, lzo)、排序算法等。这些函数被内核的其他部分广泛调用,以避免代码重复。也包含了kobject.c
和klist.c
等内核对象管理相关的代码。
mm
:- 作用: 内存管理 (Memory Management) 子系统的代码。负责管理系统的物理内存和虚拟内存。
- 内容: 包括页分配器 (buddy system)、slab/slub/slob 分配器 (用于小对象的分配)、虚拟内存管理 (如页表管理、缺页中断处理)、交换 (swap) 机制、内存映射 (mmap) 等。
net
:- 作用: 包含内核网络协议栈的实现。
- 内容: 实现了各种网络协议,如 TCP/IP (IPv4, IPv6)、UDP、ICMP、ARP 等。还包括套接字 (socket) 层、网络过滤 (Netfilter/iptables)、路由、网络调度等。各个协议族 (如
ipv4/
,ipv6/
,bluetooth/
) 都有其对应的子目录。
samples
:- 作用: 包含一些示例代码,用于演示如何使用内核的某些特性或 API。
- 内容: 提供了一些简单的内核模块、BPF 程序示例、kprobes 示例等,帮助开发者学习和测试内核功能。
scripts
:- 作用: 包含用于内核编译、配置、维护和开发的各种脚本和工具。
- 内容:
- Kbuild/Kconfig 系统相关的脚本,用于管理内核的配置和编译过程。
Makefile
片段。- 代码检查工具 (如
checkpatch.pl
)。 setlocalversion
用于生成内核版本字符串。dtc/
(Device Tree Compiler) 设备树编译器源码。package/
用于创建内核包的脚本。
security
:- 作用: 包含 Linux 安全模块 (Linux Security Modules, LSM) 框架以及各种安全模型的实现。
- 内容: LSM 框架允许插入不同的安全策略模块,如 SELinux, AppArmor, Smack, TOMOYO Linux。此目录包含了这些模块的代码以及内核的通用安全功能,如能力 (capabilities) 系统。
sound
:- 作用: 包含内核的声音子系统,即 ALSA (Advanced Linux Sound Architecture) 和早期的 OSS (Open Sound System) 的部分兼容代码。
- 内容: ALSA 核心代码、声卡驱动的通用框架以及针对各种声卡芯片的驱动程序。
tools
:- 作用: 包含一些与内核开发和调试相关的用户空间工具。这些工具通常需要与特定内核版本一起编译和使用。
- 内容:
perf/
:perf
性能分析工具的源码。hv/
: Hyper-V 主机和客户端相关的工具。power/
: 电源管理相关的工具,如turbostat
。bpf/
: BPF (Berkeley Packet Filter) 相关的工具,如bpftool
。testing/
: 内核测试相关的工具和框架。
usr
:- 作用: 主要用于生成
initramfs
(初始 RAM 文件系统) 的相关支持。 - 内容: 包含了一个早期的用户空间环境,用于在真正的根文件系统被挂载之前执行一些初始化任务。
gen_init_cpio.c
用于从一个描述文件生成 cpio 归档的 initramfs。
- 作用: 主要用于生成
virt
:- 作用: 包含与虚拟化技术相关的代码,主要是针对内核作为宿主机 (Host) 或客户机 (Guest) 运行时的支持。
- 内容:
- KVM (Kernel-based Virtual Machine) 的核心代码和特定架构的实现。
- Xen 客户机支持。
- Virtio 驱动的框架和实现 (一些 Virtio 驱动也分布在
drivers/
目录下)
内核相关的网站:
- https://www.kernel.org/ 内核的官方源头和分发中心
- https://docs.kernel.org/ 官方权威文档的查阅地
- https://kernelnewbies.org/ 新手入门和了解版本变化的窗口
- https://bugzilla.kernel.org/ 官方的缺陷报告和追踪平台
- https://elixir.bootlin.com/linux/ 源码在线阅读和分析工具
本文版权归原作者zhaofujian所有,采用 CC BY-NC-ND 4.0 协议进行许可,转载请注明出处。