2. 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 内核源码的顶层目录组织清晰,每个目录对应一个核心子系统。理解目录结构是后续阅读与修改代码的基础。

Linux 内核源码顶层目录结构 arch/ block/ drivers/ fs/ include/ kernel/ mm/ net/ scripts/ 目录功能说明: arch/ — 体系结构相关代码(x86, arm, riscv 等) block/ — 块设备层(I/O 调度、请求队列) drivers/ — 设备驱动(网络、存储、USB、GPU 等) fs/ — 文件系统(ext4, btrfs, nfs, proc, sysfs 等) include/ — 内核头文件(公共 API、数据结构定义) kernel/ — 核心调度、进程管理、中断处理 mm/ — 内存管理(页分配、slab、虚拟内存) net/ — 网络协议栈(TCP/IP、socket、netfilter) scripts/ — 编译脚本、配置工具、调试辅助脚本

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 版本的选择策略及其在服务器与嵌入式场景中的优势。
  • 内核源码顶层目录的结构与各子系统的核心职责。
  • 源码完整性验证方法。