![内核修补提示“检测到反向(或先前应用的)补丁!假设-R? [n]”](https://linux22.com/image/190738/%E5%86%85%E6%A0%B8%E4%BF%AE%E8%A1%A5%E6%8F%90%E7%A4%BA%E2%80%9C%E6%A3%80%E6%B5%8B%E5%88%B0%E5%8F%8D%E5%90%91%EF%BC%88%E6%88%96%E5%85%88%E5%89%8D%E5%BA%94%E7%94%A8%E7%9A%84%EF%BC%89%E8%A1%A5%E4%B8%81%EF%BC%81%E5%81%87%E8%AE%BE-R%EF%BC%9F%20%5Bn%5D%E2%80%9D.png)
我是第一次尝试内核修补。我不确定以下是否遇到错误以及我是否正确执行。但在所有教程和视频中都显示,.patch 扩展名文件,但我有一个 .xz 文件。
从 下载稳定版本 5.12.1https://www.kernel.org:
root@learn:/usr/local/src# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.12.1.tar.xz
root@learn:/usr/local/src# mkdir Linux-Kernel-5.12.1
root@learn:/usr/local/src# tar xvf linux-5.12.1.tar.xz -C Linux-Kernel-5.12.1/ --strip-components=1
root@learn:/usr/local/src# cd Linux-Kernel-5.12.1/
root@learn:/usr/local/src/Linux-Kernel-5.12.1# cp /boot/config-$(uname -r) ./.config
从以下位置下载了补丁 .xz 文件https://www.kernel.org/到目录:
root@learn:/usr/local/src/Linux-Kernel-5.12.1# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-5.12.1.xz
申请时:
root@learn:/usr/local/src/Linux-Kernel-5.12.1# patch -p1 < patch-5.12.1
patching file Makefile
Reversed (or previously applied) patch detected! Assume -R? [n]
这意味着什么?。
那时我该怎么办?
另外,对于 Ubuntu/Debian,正在下载稳定的内核及其补丁https://www.kernel.org/是正确的方法还是除了 kernel.org 之外它还有自己的源 URL?
答案1
这个错误信息
Reversed (or previously applied) patch detected! Assume -R? [n]
...意味着该patch
命令检测到您的补丁已应用于源。它建议您使用,patch -R
但这不是您想要的,因为它会取消应用补丁,因此您将获得早期版本的 Linux 源代码。
这是由于你的一个误解造成的。查看补丁的第一行:
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 12
-SUBLEVEL = 0
+SUBLEVEL = 1
EXTRAVERSION =
NAME = Frozen Wasteland
该块的作用是更改 Makefile 的第 4 行,使其SUBLEVEL
从 0 变为 1。实际上,此补丁将 Linux 版本从 5.12.0 更改为 5.12.1,即您已经拥有的版本(因此出现错误消息)。
所以,这不是正确的补丁。你想要的是5.12.2 补丁。但如果你看一下它(如上所示),你会发现它适用于5.12.0 源码树,不是 5.12.1 的:
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 12
-SUBLEVEL = 0
+SUBLEVEL = 2
EXTRAVERSION =
NAME = Frozen Wasteland