![次要内核更新了运行自定义内核构建的人员的适用性](https://linux22.com/image/203840/%E6%AC%A1%E8%A6%81%E5%86%85%E6%A0%B8%E6%9B%B4%E6%96%B0%E4%BA%86%E8%BF%90%E8%A1%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E5%86%85%E6%A0%B8%E6%9E%84%E5%BB%BA%E7%9A%84%E4%BA%BA%E5%91%98%E7%9A%84%E9%80%82%E7%94%A8%E6%80%A7.png)
想象一下情况。
您正在运行一个自定义内核,该内核是您使用自己的.config
.发布了一个新的小更新,假设5.16.16
是昨天发布的,而您已经在运行5.16.15
.
你如何确定一定其中5.16.16
包含的更改实际上影响你的设置?您应该编译并重新启动它,还是它对您的更改为零并且您可以安全地跳过它?
我在想这个:
- 应用补丁
- 将内核版本恢复到您已经运行的版本
- 构建内核并将其安装到临时目录中
- 二进制比较结果文件
这会不行。模块可能匹配(我什至不完全确定),但vmlinuz
会有所不同,因为它包含构建日期/时间以及标识内核已构建次数的数字,即 Linux localhost.localdomain 5.16.15 #1 SMP PREEMPT Thu Mar 17 11:20:15 2022 x86_64 x86_64 x86_64 GNU/Linux
- 你可以看到#1
.
必须以某种方式跳过这一点。
换句话说,我正在寻找一个可重现的内核构建,它忽略任何局部变量。
有燕尾服制作 但我不知道如何使用我的自定义 .config,仅此而已。
答案1
我不知道有什么简单的方法来获得可重现的内核构建,它可以告诉您在这里需要了解的内容。
然而,内核构建现在非常擅长仅重建实际需要重建的文件,因此您可以使用它来很好地指示凹凸对您的相关性:
$ git checkout v5.16.14
$ make bzImage modules
$ md5sum $(find . -name \*.o | sort) > v5.16.14.sums
$ git checkout v5.16.15
$ make bzImage modules
$ md5sum $(find . -name \*.o | sort) > v5.16.15.sums
(由于内核中的文件命名限制,乐观地使用find
和以上是可行的。)sort
如果这显示除vmlinux.o
和kallsyms
文件之外的目标文件中的更改,您可以调查相应源文件中的更改。
考虑到大多数稳定点版本中的流失量,这对于没有什么在您的构建中进行更改的源代码中。使用 时make allnoconfig
,最小的 x86-64 内核会在 5.16.14 和 5.16.15 之间显示 25 个更改的目标文件。