Linux 内核源码获取与版本选择
编译与调试 Linux 内核的第一步,是获取正确、完整且适合目标场景的源码。本章将系统讲解内核源码的获取途径、版本选择策略以及源码顶层目录的结构,帮助你在后续实验中快速定位关键代码。
2.1 内核源码获取途径
Linux 内核源码的官方发布渠道为 kernel.org,同时社区也广泛使用 Git 仓库进行版本管理与协作开发。以下两种方式均可获得完整源码:
| 获取方式 | 命令 / 操作 | 适用场景 | 特点 |
|---|---|---|---|
| HTTP 下载 | wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz |
固定版本、离线编译 | 体积小、速度快、无需网络依赖 |
| Git 克隆 | git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git |
跟踪主线、定制开发 | 可获取完整提交历史、便于回退与分支管理 |
推荐做法: 对于课程实验,建议使用
git clone --depth=1 浅克隆方式,仅拉取最新版本代码,节省磁盘空间与下载时间。若需查看历史提交或进行补丁管理,可去掉 --depth=1 参数。
2.1.1 从 kernel.org 下载压缩包
访问 https://www.kernel.org,页面顶部会显示最新的主线版本、稳定版本以及长期支持(LTS)版本。右键复制 tar.xz 链接,使用 wget 或 curl 下载:
# 下载 Linux 6.6 LTS 源码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz
# 解压
tar -xf linux-6.6.tar.xz
cd linux-6.6
2.1.2 使用 Git 克隆官方仓库
Linux 内核的主线仓库由 Linus Torvalds 维护,地址为:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
克隆完成后,可通过 git tag 查看所有发布版本标签,使用 git checkout v6.6 切换到指定版本。
注意: 完整克隆内核仓库(含全部历史)约 3-5 GB,浅克隆(depth=1)仅约 1.5 GB。请确保磁盘有足够空间。
2.2 LTS 版本选择策略
Linux 内核的版本号遵循 主版本.次版本.修订版本 格式。对于服务器环境与嵌入式产品,选择 LTS(Long Term Support) 版本是最佳实践。
| 版本类型 | 维护周期 | 适用场景 | 示例 |
|---|---|---|---|
| 主线(Mainline) | 约 2-3 个月 | 开发测试、新功能验证 | 6.8-rc1 |
| 稳定(Stable) | 约 3-6 个月 | 一般桌面、短期项目 | 6.7.5 |
| LTS | 6 年以上 | 服务器、嵌入式、工业控制 | 6.6.x, 6.1.x, 5.15.x |
选择建议: 本课程选用 Linux 6.6 LTS 作为实验内核。该版本于 2023 年 10 月发布,支持至 2029 年,兼具新硬件支持与长期稳定性,适合 QEMU 模拟调试。
LTS 版本的选择需考虑以下因素:
- 硬件兼容性: 较新的 LTS 版本对现代 CPU、网卡、存储控制器支持更好。
- 安全更新: LTS 版本会持续接收安全补丁,适合生产环境。
- 社区生态: 主流发行版(如 Ubuntu、Debian、RHEL)均基于 LTS 内核定制。
2.3 内核源码顶层目录结构概览
Linux 内核源码的顶层目录组织清晰,每个目录对应一个核心子系统。理解目录结构是后续阅读与修改代码的基础。
2.3.1 各目录核心职责
| 目录 | 核心职责 | 关键子目录 / 文件示例 |
|---|---|---|
| arch/ | CPU 体系结构相关代码 | arch/x86/, arch/arm/, arch/riscv/ |
| block/ | 块设备 I/O 层 | blk-core.c, mq-deadline.c |
| drivers/ | 设备驱动 | drivers/net/, drivers/usb/, drivers/gpu/ |
| fs/ | 文件系统实现 | fs/ext4/, fs/proc/, fs/sysfs/ |
| include/ | 内核头文件 | include/linux/, include/uapi/ |
| kernel/ | 核心调度与进程管理 | sched/, irq/, power/ |
| mm/ | 内存管理 | mmap.c, slab.c, page_alloc.c |
| net/ | 网络协议栈 | ipv4/, core/, netfilter/ |
| scripts/ | 编译与配置工具 | kconfig/, recordmcount.pl |
2.3.2 其他重要顶层文件
除了上述目录,源码根目录下还有几个关键文件:
- Kconfig — 顶层配置菜单,控制所有子系统的编译选项。
- Makefile — 顶层构建文件,定义编译目标与链接规则。
- MAINTAINERS — 维护者列表,记录各子系统的负责人与邮件列表。
- CREDITS — 内核贡献者致谢名单。
- COPYING — GPL 许可证文本。
实战提示: 在后续 QEMU 调试实验中,你最常修改的目录将是
arch/x86/(启动流程)、kernel/(调度与中断)、drivers/(设备模拟)以及 mm/(内存布局)。建议提前浏览这些目录下的关键文件。
2.4 验证源码完整性
下载完成后,建议验证源码的完整性,避免传输损坏导致编译失败。kernel.org 为每个发布包提供了 SHA256 校验和文件:
# 下载校验和文件
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/sha256sums.asc
# 校验
sha256sum -c sha256sums.asc --ignore-missing 2>/dev/null | grep linux-6.6
若输出 OK,则说明源码完整无误。
2.5 本章小结
通过本章学习,你已掌握:
- 从 kernel.org 下载或 Git 克隆获取内核源码的两种方式。
- LTS 版本的选择策略及其在服务器与嵌入式场景中的优势。
- 内核源码顶层目录的结构与各子系统的核心职责。
- 源码完整性验证方法。