3. PREEMPT_RT 补丁获取

获取正确版本的 PREEMPT_RT 补丁是构建实时 Linux 系统的第一步。内核社区与 RT 维护者遵循严格的版本匹配规则,开发者必须理解补丁仓库结构、版本号对应关系以及验证方法,才能避免因补丁与内核不匹配导致的编译失败或运行时异常。

3.1 RT 补丁源码仓库

PREEMPT_RT 补丁的官方主仓库托管于 Linux 内核稳定维护树(Stable Tree)的 rt 分支,同时存在多个镜像站点供全球开发者使用。下表列出主要仓库地址及其用途:

仓库名称 URL / 访问方式 说明
内核官方 Git 仓库(RT 分支) git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git 包含所有 RT 补丁集的历史版本,适合开发者跟踪最新进展
内核.org 补丁存档 https://www.kernel.org/pub/linux/kernel/projects/rt/ 提供已发布的 .patch.xz 压缩补丁文件,适合直接下载使用
CDN 镜像(中国区加速) https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/ 国内开发者推荐使用,下载速度更快
GitHub 社区镜像 https://github.com/linux-rt/linux-rt-devel 非官方镜像,方便通过 Web 界面浏览提交历史
提示:生产环境建议从 kernel.org 官方存档下载补丁,避免第三方镜像可能存在的文件篡改风险。下载后务必执行完整性校验(参见 3.3 节)。

3.2 补丁版本与内核版本匹配规则

PREEMPT_RT 补丁与 Linux 主线内核之间存在严格的版本对应关系。补丁命名格式为 patch-{内核版本}-rt{补丁序号}.patch.xz,例如 patch-5.10.100-rt60.patch.xz 表示该补丁适用于内核 5.10.100,且是该内核的第 60 个 RT 补丁迭代。

匹配规则遵循以下三条核心原则:

  1. 主版本号必须完全一致:补丁的 MAJOR.MINOR(如 5.10)必须与目标内核相同,不能跨大版本使用。
  2. 补丁基线版本(PATCHLEVEL)必须匹配:补丁文件名中的 5.10.100 表示该补丁仅适用于内核 5.10.100,不能用于 5.10.99 或 5.10.101。
  3. RT 补丁序号(rtN)仅用于标识迭代:序号越大表示补丁越新,但必须与内核基线版本绑定。例如 rt60 仅适用于 5.10.100,不适用于 5.10.99。
版本匹配速查表(以 5.10 LTS 系列为例):
内核版本 可用 RT 补丁 补丁文件示例 状态
5.10.100 rt60 patch-5.10.100-rt60.patch.xz 已发布,稳定
5.10.99 rt59 patch-5.10.99-rt59.patch.xz 已发布,稳定
5.10.101 rt61(开发中) patch-5.10.101-rt61.patch.xz 可能处于 RC 阶段
5.15.0 不适用 — 主版本号不同,无法匹配
常见错误:初学者常误以为 rt60 可以应用于所有 5.10.x 内核。实际上,每个 rtN 补丁都精确绑定到特定的 MAJOR.MINOR.PATCHLEVEL 版本。使用 uname -r 确认当前内核版本后,再选择对应补丁。

下图展示了补丁版本与内核版本之间的匹配关系:

补丁版本与内核版本匹配关系 内核 5.10.100 内核 5.10.99 内核 5.15.0 补丁 rt60 补丁 rt59 无匹配补丁 规则:主版本号必须一致,补丁基线版本必须精确匹配,rtN 序号仅标识迭代 5.10.100 只能使用 rt60,5.10.99 只能使用 rt59,5.15.0 无可用 RT 补丁

3.3 补丁下载与验证

下载 PREEMPT_RT 补丁时,必须同时获取对应的签名文件或校验和,以确保补丁文件在传输过程中未被篡改。推荐使用 wget 或 curl 从 kernel.org 直接下载,并配合 gpg 或 sha256sum 进行验证。

标准下载与验证流程:

  1. 确定目标内核版本:使用 uname -r 查看当前运行的内核版本,或从内核官网选择 LTS 版本。
  2. 定位补丁文件:访问 https://www.kernel.org/pub/linux/kernel/projects/rt/,进入对应主版本号目录(如 5.10/),找到与内核基线版本匹配的补丁文件。
  3. 下载补丁与签名文件:同时下载 .patch.xz 和 .patch.xz.sign 文件。
  4. 导入 RT 维护者公钥:从 kernel.org 获取维护者 PGP 公钥并导入本地密钥环。
  5. 验证签名:使用 gpg --verify 命令验证补丁文件的数字签名。
下载与验证命令示例(以 5.10.100-rt60 为例):
# 1. 下载补丁文件
wget https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10.100-rt60.patch.xz

# 2. 下载签名文件
wget https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10.100-rt60.patch.xz.sign

# 3. 导入内核维护者 PGP 公钥(首次使用)
gpg --locate-keys torvalds@kernel.org gregkh@kernel.org

# 4. 验证签名
xzcat patch-5.10.100-rt60.patch.xz | gpg --verify patch-5.10.100-rt60.patch.xz.sign -

# 5. 若签名验证通过,输出类似:
# gpg: Good signature from "Greg Kroah-Hartman <gregkh@kernel.org>"
安全提醒:如果 gpg --verify 输出 BAD signature,说明文件已被篡改或下载不完整,切勿使用该补丁。此时应重新下载或更换镜像站点。

下表总结了不同验证方式的适用场景:

验证方式 所需文件 命令示例 适用场景
PGP 签名验证 .patch.xz + .patch.xz.sign gpg --verify 官方推荐,安全性最高
SHA256 校验 .patch.xz + sha256sums.txt sha256sum -c sha256sums.txt 快速校验,无公钥时使用
MD5 校验 .patch.xz + md5sums.txt md5sum -c md5sums.txt 仅用于完整性检查,不防篡改

下图展示了从下载到验证的完整流程:

补丁下载与验证流程 1. 确定内核版本 2. 定位补丁文件 3. 下载补丁+签名 4. 导入 PGP 公钥 5. 验证签名 6. 通过?使用补丁 签名失败?重新下载 始终使用 PGP 签名验证,SHA256 仅作为备选方案

3.4 补丁获取常见问题与避坑指南

在实际项目中,开发者常遇到以下问题,提前了解可避免走弯路:

  • 补丁与内核版本号不匹配:下载补丁前务必使用 uname -r 确认内核版本,不要仅凭记忆选择。
  • 忽略签名验证:跳过验证直接使用补丁可能导致编译时出现难以排查的符号错误,甚至引入安全后门。
  • 使用过旧的 RT 补丁:即使内核版本相同,也应尽量使用最新的 rtN 序号,因为新补丁修复了已知的实时性缺陷。
  • 从非官方源下载:第三方网站可能提供修改过的补丁,务必从 kernel.org 或官方镜像获取。
  • 补丁文件解压后未检查完整性:.xz 压缩包可能在下载过程中损坏,解压前应验证校验和。
最佳实践:建议在项目文档中记录所使用的内核版本与 RT 补丁版本号,并附上 SHA256 校验值。这样在后续复现构建环境时,可以快速确认补丁文件是否一致。