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 补丁迭代。
匹配规则遵循以下三条核心原则:
- 主版本号必须完全一致:补丁的
MAJOR.MINOR(如 5.10)必须与目标内核相同,不能跨大版本使用。 - 补丁基线版本(PATCHLEVEL)必须匹配:补丁文件名中的
5.10.100表示该补丁仅适用于内核 5.10.100,不能用于 5.10.99 或 5.10.101。 - 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 确认当前内核版本后,再选择对应补丁。
下图展示了补丁版本与内核版本之间的匹配关系:
3.3 补丁下载与验证
下载 PREEMPT_RT 补丁时,必须同时获取对应的签名文件或校验和,以确保补丁文件在传输过程中未被篡改。推荐使用 wget 或 curl 从 kernel.org 直接下载,并配合 gpg 或 sha256sum 进行验证。
标准下载与验证流程:
- 确定目标内核版本:使用
uname -r查看当前运行的内核版本,或从内核官网选择 LTS 版本。 - 定位补丁文件:访问
https://www.kernel.org/pub/linux/kernel/projects/rt/,进入对应主版本号目录(如5.10/),找到与内核基线版本匹配的补丁文件。 - 下载补丁与签名文件:同时下载
.patch.xz和.patch.xz.sign文件。 - 导入 RT 维护者公钥:从 kernel.org 获取维护者 PGP 公钥并导入本地密钥环。
- 验证签名:使用
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 |
仅用于完整性检查,不防篡改 |
下图展示了从下载到验证的完整流程:
3.4 补丁获取常见问题与避坑指南
在实际项目中,开发者常遇到以下问题,提前了解可避免走弯路:
- 补丁与内核版本号不匹配:下载补丁前务必使用
uname -r确认内核版本,不要仅凭记忆选择。 - 忽略签名验证:跳过验证直接使用补丁可能导致编译时出现难以排查的符号错误,甚至引入安全后门。
- 使用过旧的 RT 补丁:即使内核版本相同,也应尽量使用最新的
rtN序号,因为新补丁修复了已知的实时性缺陷。 - 从非官方源下载:第三方网站可能提供修改过的补丁,务必从 kernel.org 或官方镜像获取。
- 补丁文件解压后未检查完整性:
.xz压缩包可能在下载过程中损坏,解压前应验证校验和。
最佳实践:建议在项目文档中记录所使用的内核版本与 RT 补丁版本号,并附上 SHA256 校验值。这样在后续复现构建环境时,可以快速确认补丁文件是否一致。