1. 问题背景:最近在linux上给内核打补丁时遇到了一些Hunk # succeeded at ... 提示(提示如下图),很纠结这个Hunk提示意味着什么,是不是意味着补丁没打上?
[root@localhost kerneltest]# cat details | grep "Hunk"
Hunk #1 succeeded at 2600 (offset 82 lines).
Hunk #1 succeeded at 1179 (offset 5 lines).
Hunk #5 succeeded at 3164 (offset 13 lines).
Hunk #1 succeeded at 200 (offset 15 lines).
Hunk #1 succeeded at 2394 with fuzz 1.
Hunk #3 succeeded at 2097 (offset 12 lines).
Hunk #4 succeeded at 2117 (offset 12 lines).
Hunk #5 succeeded at 4937 (offset 12 lines).
Hunk #6 succeeded at 6061 (offset 12 lines).
Hunk #7 succeeded at 6133 (offset 12 lines).
Hunk #8 succeeded at 6141 (offset 12 lines).
Hunk #9 succeeded at 6304 (offset 12 lines).
Hunk #10 succeeded at 6499 (offset 12 lines).
Hunk #11 succeeded at 6545 (offset 12 lines).
2. 查找原因:
首先,查看提示“Hunk #1 succeeded at 2600 (offset 82 lines)”相对应的内核文件与patch文件,会发现patch里的该代码块对应的行数与内核文件里找到的该代码块的对应行数发生了82行的偏移。
因此,可以手动改变patch文件里的内码对应的行数,这样子,针对该内核打patch时就不会发生报错。
3. 在有“Hunk# succeeded at (offset lines)"提示下,验证patch补丁是否成功打上?
a.对照组:在第2步查找原因中手动改变patch对应行数,生成不会报Hunk提示的补丁。
b.实验组:patch -p1 <*.patch 文件自动打上patch,会出现Hunk提示。
实验结果:a(对照组)与b(实验组)打上补丁后的内核一样,没有差异。因为我认为,出现“Hunk# succeeded at (offset lines)"提示应该是代表补丁成功打上,只是行数相对于原补丁发生了几行偏移。
4. 疑问?
(1)Linux设定“Hunk# succeeded at (offset lines)"提示的官方原因是什么?什么情况下出现这种提示?
(2)Hunk #1 succeeded at * with fuzz 与Hunk #3 succeeded at * (offset 12 lines)有什么不同? with fuzz与offset lines有啥不同呢?
期待大神的回答。