开始学习
Linux 内核简介
Linux 内核源码下载
您可以从许多渠道获得 Linux 内核源码:
- 从官网 kernel.org 下载
- 从 GitHub 仓库 下载
Linux 内核源码结构
内核源码很复杂,包含多级目录,形成了一个庞大的树状结构,通常称为 Linux 源码目录树。在源码目录树顶层通常包含如下目录和文件。
arch crypto init lib net sound
block Documentation ipc LICENSES README tools
certs drivers Kbuild MAINTAINERS samples usr
COPYING fs Kconfig Makefile scripts virt
CREDITS include kernel mm security
Linux 源码顶层各个目录文件的简要说明如下:
- arch
- 包含各种体系结构特定的代码,每一个子目录都代表 Linux 支持的 CPU 架构,如 arm、arm64、x86、ia64、mips、riscv 等。而在每个体系结构目录下,通常又包含以下子目录:
- boot —— 内核需要的特定平台代码
- kernel —— 体系结构特有的代码
- lib —— 通用函数在特定体系结构的实现
- math-emu —— 模拟 FPU 的代码,在 ARM 中使用 mach-xxx 代替
- mm —— 特定体系结构的内存管理实现
- include —— 特定体系的头文件
- block
- 存放块设备相关代码。
- certs
- 存放证书相关代码。
- crypto
- 存放加密、压缩、CRC 校验等算法相关代码。
- Documentation
- 存放相关说明文档,有很多实用的文档,包括代码风格、驱动编写等等。
- drivers
- 存放 Linux 内核设备驱动程序源码。
- 驱动源码在 Linux 内核源码中占了很大比例,常见外设几乎都有可参考源码,对驱动开发而言,该目录非常重要。该目录包含众多驱动,目录按照设备类别进行分类,如 char、block、input、i2c、spi、pci、usb 等。
- fs
- 存放所有文件系统代码,如 fat、ext2、ext3、ext4、ubifs、nfs、sysfs 等。
- include
- 存放内核所需、与平台无关的头文件。与平台相关的头文件已经被移动到 arch 平台的 include 目录,如 ARM 的头文件目录
<arch/arm/include/asm>
。
- 存放内核所需、与平台无关的头文件。与平台相关的头文件已经被移动到 arch 平台的 include 目录,如 ARM 的头文件目录
- init
- 包含内核初始化代码。
- ipc
- 存放进程间通信代码。
- kernel
- 包含 Linux 内核管理代码。
- lib
- 库文件代码实现。
- mm
- 存放内存管理代码。
- net
- 存放网络相关代码。
- samples
- 存放提供的一些内核编程范例,如 kfifo;或者相关用户态编程范例,如 hidraw。
- scripts
- 存放一些脚本文件,如 menuconfig 脚本。
- security
- 存放系统安全性相关代码。
- sound
- 存放音频相关代码,包括与音频有关的驱动程序。
- tools
- 存放编译过程中一些主机必要工具。
- usr
- 存放 cpio 相关代码。该目录中的代码为内核尚未完全启动时执行用户空间代码提供了支持。
- virt
- 存放内核虚拟机 KVM 相关代码。此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。
几个文件
文件 | 描述 |
---|---|
COPYING | 许可和授权信息。 |
CREDITS | 贡献者列表。 |
Kbuild | 内核设定脚本,可以对内核中的变量进行设定。 |
Kconfig | 配置哪些文件编译,那些文件不用编译。 |
MAINTAINERS | Linux 内核维护者(maintainer)信息列表。 |
Makefile | 该文件将编译参数、编译所需的文件和必要的信息传给编译器。 |
README | 项目说明文件。 |