我是第一次尝试内核修补。我不确定以下是否遇到错误以及我是否正确执行。但在所有教程和视频中都显示,.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