我正在尝试在 Lubuntu 16.04 发行版上安装带有 RT_PREEMPT 补丁的内核,但遇到了一些我不知道如何处理的问题。我已经从内核下载了内核 v4.4.12 (linux-4.4.12.tar.xz) 的源代码以及我认为合适的 RT_PREEMPT 补丁 (patches-4.4.12-rt20.tar.xz)。组织。我已使用tar xf
, 'd将内核源代码提取cd
到目录中,然后尝试应用补丁xzcat ../patches-4.4.12.tar.xz | patch -p1
(根据此处的建议:https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO)。这个命令只会生成大量错误,抱怨不存在的文件的补丁、以前应用的补丁、失败的补丁等等。一些补丁块似乎成功了,但很多都失败了。
这不可能是修补这个内核的正确方法吧?知道我哪里出错了吗?
编辑:这是一个涵盖我所看到的错误类型的示例:
rush@lubuntuvm:~/preempt-rt/linux-4.4.12$ xzcat ../patches-4.4.12-rt20.tar.xz | patch -p1
patching file arch/x86/kernel/nmi.c
Hunk #1 FAILED at 231.
Hunk #2 FAILED at 256.
Hunk #3 FAILED at 305.
3 out of 3 hunks FAILED -- saving rejects to file arch/x86/kernel/nmi.c.rej
patching file arch/x86/kernel/reboot.c
patching file include/linux/kernel.h
Hunk #1 succeeded at 255 (offset -4 lines).
Hunk #2 FAILED at 460.
1 out of 2 hunks FAILED -- saving rejects to file include/linux/kernel.h.rej
patching file kernel/panic.c
Hunk #1 FAILED at 61.
1 out of 1 hunk FAILED -- saving rejects to file kernel/panic.c.rej
patching file kernel/watchdog.c
Hunk #1 FAILED at 361.
1 out of 1 hunk FAILED -- saving rejects to file kernel/watchdog.c.rej
patching file kernel/stop_machine.c
Hunk #12 succeeded at 482 (offset -10 lines).
Hunk #13 succeeded at 544 (offset -10 lines).
Hunk #14 succeeded at 648 (offset -10 lines).
patching file block/blk-mq.c
Reversed (or previously applied) patch detected! Assume -R? [n] n
Apply anyway? [n]
Skipping patch.
3 out of 3 hunks ignored -- saving rejects to file block/blk-mq.c.rej
patching file block/blk-mq.h
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
3 out of 3 hunks ignored -- saving rejects to file block/blk-mq.h.rej
patching file net/core/dev.c
Hunk #1 succeeded at 3542 (offset -3 lines).
Hunk #2 succeeded at 3552 (offset -3 lines).
patching file arch/arm64/Kconfig
patching file arch/arm64/include/asm/thread_info.h
patching file arch/arm64/kernel/asm-offsets.c
patching file arch/arm64/kernel/entry.S
can't find file to patch at input line 794
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--
|2.8.1
|
|patches/0026-hwlat-detector-Use-trace_clock_local-if-available.patch0000644001303100130310000000625512741715155025466 0ustar rostedtrostedtFrom c184dd4a4a5d88b3223704297a42d1aaab973811 Mon Sep 17 00:00:00 2001
|From: Steven Rostedt <[email protected]>
|Date: Mon, 19 Aug 2013 17:33:26 -0400
|Subject: [PATCH 026/351] hwlat-detector: Use trace_clock_local if available
|
|As ktime_get() calls into the timing code which does a read_seq(), it
|may be affected by other CPUS that touch that lock. To remove this
|dependency, use the trace_clock_local() which is already exported
|for module use. If CONFIG_TRACING is enabled, use that as the clock,
|otherwise use ktime_get().
|
|Signed-off-by: Steven Rostedt <[email protected]>
|Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
|---
| drivers/misc/hwlat_detector.c | 34 +++++++++++++++++++++++++---------
| 1 file changed, 25 insertions(+), 9 deletions(-)
|
|diff --git a/drivers/misc/hwlat_detector.c b/drivers/misc/hwlat_detector.c
|index c07e85932cbf..0fcc0e38df42 100644
|--- a/drivers/misc/hwlat_detector.c
|+++ b/drivers/misc/hwlat_detector.c
答案1
你可能想拿patch-4.4.12-rt20.patch.xz
,但不是patches-4.4.12-rt20.tar.xz
。正如扩展名所暗示的那样,后者是一个 tar 存档,而不是单个补丁文件。显然它包含与单文件版本相同的补丁,但带有提交消息等。
patch
足够聪明,可以忽略无用的东西(显然,例如 tar 文件结构),因此某些补丁有效。但我认为组件补丁可能相互依赖,并且在 tar 文件中的顺序错误,因此它不能完全应用。