2. Linux 内核源码获取:Git仓库克隆、主线内核与稳定内核、LTS版本选择策略

在构建实时Linux系统之前,获取正确版本的内核源码是第一步。本章将系统讲解如何通过Git仓库获取内核源码,区分主线内核与稳定内核,并制定适用于实时系统的LTS版本选择策略。

2.1 内核源码获取方式对比

Linux内核源码的获取主要有三种途径:Git仓库克隆、压缩包下载、以及发行版源码包。对于实时系统开发,推荐使用Git仓库克隆,因为它便于版本切换和补丁管理。

获取方式 命令/工具 适用场景 优点 缺点
Git仓库克隆 git clone 开发、调试、定制 完整历史、分支切换、补丁管理 首次下载量大
压缩包下载 wget / curl 快速部署、只读使用 体积小、无需Git环境 无版本历史、不便管理
发行版源码包 apt-get source 与发行版内核对齐 预配置、与系统兼容 版本滞后、定制受限
推荐做法: 实时系统开发应始终使用Git仓库克隆方式,以便在主线、稳定、LTS以及PREEMPT_RT补丁分支之间灵活切换。

2.2 主线内核与稳定内核

Linux内核的发布遵循明确的版本号规则,理解主线(Mainline)与稳定(Stable)内核的区别至关重要。

  • 主线内核(Mainline):由Linus Torvalds维护,包含最新功能与驱动,但稳定性未经充分验证。版本号格式为 vX.Y(如 v6.8)。
  • 稳定内核(Stable):由稳定内核团队维护,基于主线内核进行bug修复和安全更新。版本号格式为 vX.Y.Z(如 v6.8.5)。
  • 长期支持内核(LTS):维护周期长达2-6年,适合嵌入式与实时产品。版本号格式为 vX.Y.Z,带有LTS标识。
关键区别: 主线内核每2-3个月发布一个新版本,稳定内核每周发布小版本更新,LTS内核则提供长达数年的持续维护。实时系统应优先选择LTS内核。
Linux内核版本演进与分支关系 主线内核 (Mainline) v6.8 → v6.9 → v6.10 稳定内核 (Stable) v6.8.1 → v6.8.2 → ... LTS 内核 v6.6.x (维护至2029) 分支 选择 PREEMPT_RT 补丁 实时嵌入式系统 推荐路径:主线内核 → 稳定内核 → LTS内核 → 应用PREEMPT_RT补丁 → 实时系统

2.3 LTS版本选择策略

对于实时嵌入式系统,LTS内核的选择直接关系到产品的生命周期和维护成本。以下是选择LTS版本的核心策略:

  1. 匹配产品生命周期:选择维护周期覆盖产品预期寿命的LTS版本。例如,产品计划2025年上市、维护至2030年,则应选择至少维护到2030年的LTS内核。
  2. PREEMPT_RT补丁支持:确认所选LTS版本有对应的PREEMPT_RT补丁。通常,补丁在LTS发布后3-6个月内可用。
  3. 硬件平台兼容性:检查目标SoC/CPU的BSP是否支持该LTS版本。部分厂商的驱动可能只适配特定内核版本。
  4. 社区活跃度:选择社区维护活跃的LTS版本,确保bug修复和安全更新的及时性。
LTS版本 起始日期 预计维护截止 PREEMPT_RT支持 推荐场景
v6.6.x 2023-10 2029-12 ✅ 完整支持 新项目首选
v6.1.x 2022-12 2027-12 ✅ 完整支持 成熟项目、工业控制
v5.15.x 2021-10 2026-10 ✅ 完整支持 长期维护项目
v5.10.x 2020-12 2026-12 ✅ 完整支持 旧平台兼容
注意: 不要选择即将结束维护的LTS版本(如v5.4.x,已于2024年12月EOL)。实时系统对安全更新要求极高,过期的内核版本将面临未修补的安全漏洞风险。

2.4 Git仓库克隆实战

以下是通过Git克隆Linux内核源码的标准流程,适用于实时系统开发环境。

2.4.1 克隆主线内核仓库

# 克隆完整仓库(包含所有历史,约3.5GB)
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux-mainline

# 进入目录
cd linux-mainline

# 查看所有标签(版本号)
git tag -l 'v6.*' | head -20

# 切换到指定版本(例如 v6.8)
git checkout v6.8

2.4.2 克隆稳定内核仓库

# 克隆稳定内核仓库(包含所有稳定版本)
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-stable

# 切换到最新的LTS版本(例如 v6.6.30)
cd linux-stable
git checkout v6.6.30

2.4.3 浅克隆(节省带宽)

# 浅克隆:只获取最新版本,不包含历史(约200MB)
git clone --depth 1 --branch v6.6.30 \
  https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-lts-6.6
效率提示: 在CI/CD或容器化构建环境中,使用 --depth 1 浅克隆可以大幅减少下载时间和磁盘占用。但在开发环境中,建议使用完整克隆以便于版本切换和补丁回溯。

2.5 验证源码完整性

获取源码后,应验证其完整性和签名,确保未被篡改。Linux内核使用GPG签名进行发布验证。

# 导入内核维护者的公钥
gpg --locate-keys torvalds@kernel.org gregkh@kernel.org

# 验证标签签名
git tag -v v6.6.30

# 输出示例(表示验证通过):
# object 1234567...
# type commit
# tag v6.6.30
# tagger Greg Kroah-Hartman <gregkh@linuxfoundation.org> 1712345678 +0000
# gpg: Signature made ... using RSA key ...
# gpg: Good signature from "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
安全最佳实践: 在实时系统中,任何未经签名的内核源码都不应被用于生产环境。始终执行 git tag -v 验证,确保源码来自官方维护者。

2.6 内核源码目录结构概览

理解内核源码的目录结构有助于后续的配置和编译工作。以下是关键目录及其功能:

Linux内核源码顶层目录结构 linux/ arch/ drivers/ kernel/ mm/ fs/ 体系结构相关 arm64, x86, riscv 设备驱动 最大子目录 核心调度/进程 PREEMPT_RT 修改点 内存管理 页分配、SLUB 文件系统 ext4, btrfs 实时系统重点关注目录 kernel/sched/ kernel/locking/ kernel/irq/ mm/

2.7 本章小结

  • Git仓库克隆是获取内核源码的首选方式,支持版本切换和补丁管理。
  • 主线内核提供最新功能,稳定内核提供bug修复,LTS内核适合实时产品。
  • LTS版本选择应匹配产品生命周期、PREEMPT_RT补丁支持、硬件兼容性和社区活跃度。
  • 始终验证源码的GPG签名,确保源码完整性和安全性。
  • 实时系统开发应重点关注 kernel/sched/、kernel/locking/、kernel/irq/ 和 mm/ 目录。