应用RT内核补丁提示can't find file to patch at input line 5如何解决
核心错误
你操作存在两个关键问题:
- 缺少与RT补丁版本严格匹配的原生(vanilla)Linux 5.4.193内核源码树。PREEMPT_RT是增量补丁,无法独立使用,必须基于对应版本的主线内核源码打补丁后才能编译。
- 执行补丁命令的目录错误。你在解压出来的
patches文件夹内执行打补丁操作,该目录仅存放拆分后的补丁片段,不存在补丁要修改的内核原生文件(比如报错里提到的Documentation目录下的文件),patch命令自然找不到目标文件。
你之前调整-p参数没有效果,本质是目录下根本不存在待补丁的目标文件,和路径截断参数无关。
正确操作流程
- 回到
rt_kernel_build工作根目录,获取版本号完全一致的Linux 5.4.193原生内核源码压缩包,注意版本号必须和你下载的patch-5.4.193-rt74.patch.xz完全匹配,小版本号不一致也会导致打补丁失败。 - 解压原生内核源码:
xz -cd linux-5.4.193.tar.xz | tar xvf -
解压完成后根目录会生成linux-5.4.193文件夹,这就是待打补丁的完整内核源码树。
- 进入内核源码根目录:
cd linux-5.4.193
- 执行打补丁命令,直接使用单文件合并补丁即可,无需手动逐个应用patches文件夹内的拆分补丁:
xzcat ../patch-5.4.193-rt74.patch.xz | patch -p1
命令执行无报错即代表补丁应用成功。
后续注意事项
- 打补丁前如果之前对内核源码做过其他修改,先在源码根目录执行
make mrproper清理残留配置和临时文件,避免打补丁冲突。 - 补丁应用完成后,按标准内核编译流程操作即可:安装编译依赖、配置内核选项(可直接复制当前系统的内核配置作为基础)、编译内核与模块、安装内核、更新grub引导项,重启后在grub菜单选择带rt标识的内核进入系统即可。
- 若后续需要验证RT内核是否生效,可安装rt-tests工具集,运行
cyclictest测试内核延迟。
内容的提问来源于stack exchange,提问作者Anton Kim
相关产品推荐
相关产品推荐

