3. Linux内核源码获取与版本选择:从kernel.org下载内核源码,讲解LTS版本选择策略,解压并查看源码目录结构

3.1 内核源码获取渠道与版本号解读

Linux内核官方发布站点为 kernel.org,所有主线版本、稳定版、长期支持(LTS)版均在此归档。获取源码前,必须理解内核版本号的语义,以便为嵌入式项目选择正确的基线。

3.1.1 版本号格式

自5.0版本起,内核采用 主版本.次版本.补丁级别 的三段式编号,不再区分奇数/偶数版为开发/稳定。例如:

版本号示例 含义 适用场景
6.6.0 主线初始发布 新功能验证、上游开发
6.6.63 稳定补丁累积 生产环境、嵌入式产品
6.1.112 LTS长期支持 工业、车规、医疗等长生命周期设备
提示: 嵌入式系统移植应优先选择 LTS 版本,其维护周期通常为 6 年以上,社区持续提供安全补丁和关键修复,避免因主线快速迭代导致的驱动接口不兼容。

3.1.2 从 kernel.org 下载源码

推荐使用 wget 或 curl 直接下载 tarball,并验证 GPG 签名以确保完整性。

# 下载 LTS 6.1 系列最新稳定版(示例版本号请以官网为准)
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.112.tar.xz

# 下载对应的签名文件
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.112.tar.sign

# 导入内核维护者公钥并验证
gpg --locate-keys torvalds@kernel.org gregkh@kernel.org
xz -cd linux-6.1.112.tar.xz | gpg --verify linux-6.1.112.tar.sign -

# 解压源码
tar -xvf linux-6.1.112.tar.xz
注意: 切勿直接使用未验证的源码包。GPG 验证失败时,应检查下载源是否被篡改或公钥是否过期。嵌入式开发中,源码的完整性直接影响后续编译和运行的安全性。

3.2 LTS版本选择策略

LTS 版本并非越多越好,选择需结合硬件平台、驱动支持周期、工具链兼容性及项目生命周期综合评估。以下为当前主流 LTS 版本对比:

LTS 版本 首发时间 预计维护截止 推荐硬件架构 关键特性
6.1.x 2022-12 2027+ ARM64、RISC-V、x86 稳定 Rust 初步支持、Btrfs 性能优化
5.15.x 2021-10 2026+ ARM32、ARM64、MIPS NTFS3 驱动、新调度器特性
5.10.x 2020-12 2026+ ARM32、x86、PowerPC 广泛验证、大量 BSP 支持
5.4.x 2019-11 2025+ ARM32、MIPS、ARC 老芯片 BSP 最成熟
选择建议:
  • 新项目(2024年后启动): 首选 6.1 LTS,兼顾新硬件支持与长期维护。
  • 已有 BSP 基础: 若芯片厂商提供 5.10 或 5.15 的完整板级支持包,优先沿用对应 LTS,减少移植工作量。
  • 极低资源设备(< 64MB RAM): 可考虑 5.4 LTS,但需评估安全补丁覆盖范围。

3.3 解压后源码目录结构解析

解压后的内核源码根目录包含约 20 个一级子目录和若干顶层文件。理解其布局是后续配置与裁剪的基础。

3.3.1 顶层目录功能总览

Linux 内核源码顶层目录结构(v6.1 LTS) arch/ drivers/ fs/ include/ kernel/ mm/ net/ ipc/ security/ crypto/ block/ lib/ scripts/ tools/ Documentation/ samples/ Kconfig / Makefile / .config MAINTAINERS / CREDITS / REPORTING-BUGS 说明: 蓝色 = 硬件/驱动相关;绿色 = 核心子系统;紫色 = 安全/加密/块层;橙色 = 构建/文档/工具;青色 = 顶层配置与元数据。 嵌入式移植重点关注 arch/、drivers/、scripts/ 以及顶层 Kconfig 和 Makefile。

3.3.2 关键目录详解

目录/文件 作用 嵌入式移植关注点
arch/ 存放各CPU架构相关代码(arm64、arm、riscv、x86等) 需根据目标板选择对应架构子目录,修改 arch/arm64/boot/dts/ 下的设备树
drivers/ 所有设备驱动源码,按子系统分类(gpio、i2c、spi、net、usb等) 裁剪不需要的驱动,添加板级外设驱动
fs/ 文件系统实现(ext4、btrfs、squashfs、overlayfs等) 嵌入式常用 squashfs(只读根文件系统)和 overlayfs
include/ 内核头文件,包含全局 API 定义 驱动开发时需引用 include/linux/ 下的头文件
kernel/ 核心调度、进程管理、中断、时间子系统 一般无需修改,但需配置调度器类型(如 PREEMPT_RT)
mm/ 内存管理(页分配、slab、vmalloc) 低内存设备需配置 CMA、内存压缩等
scripts/ 构建脚本、Kconfig 解析器、dtc(设备树编译器) 交叉编译时需确保 scripts/dtc/ 编译正确
Documentation/ 内核文档,包含设备树绑定说明、Kconfig 帮助 移植时查阅 Documentation/devicetree/bindings/
Kconfig 顶层配置菜单树入口 make menuconfig 的入口文件
Makefile 顶层构建规则,定义架构、交叉编译器变量 需设置 ARCH= 和 CROSS_COMPILE=

3.4 解压后快速验证源码完整性

解压完成后,建议执行以下检查,确保源码未被损坏且版本正确:

# 进入源码目录
cd linux-6.1.112

# 查看顶层 Makefile 确认版本
head -5 Makefile
# 输出应包含:
# VERSION = 6
# PATCHLEVEL = 1
# SUBLEVEL = 112

# 统计源码行数(粗略验证)
find . -name "*.c" -o -name "*.h" | wc -l
# 正常应在 60000~80000 之间

# 检查关键目录是否存在
ls -d arch/arm64 drivers/i2c include/linux kernel/ mm/ scripts/dtc
实战要点:
  • 解压后不要立即删除 tarball,后续可能需对比原始文件。
  • 建议在 /opt/kernel/ 或 ~/kernel_src/ 下建立版本化目录,如 linux-6.1.112/,便于多版本管理。
  • 若使用 Git 克隆内核仓库,可切换至对应 LTS 分支:git checkout linux-6.1.y,但 tarball 方式更适用于离线或受限网络环境。

3.5 本章小结

本章完成了内核源码获取、LTS 版本选型决策、解压验证及目录结构认知。这些是后续配置与移植的基础:选对版本决定了项目维护成本,理解目录决定了裁剪效率。下一阶段将基于此源码树,配置交叉编译环境并执行首次内核编译。