我正在尝试自动化重新编译升级内核的过程。(我的意思是版本升级)
我做什么:
使用 rsync 备份目标文件 (*.o)
删除目录并使 mrproper
提取新的源代码和补丁
使用 rsync 恢复目标文件
但我发现它没有意义。由于跳过编译的东西需要得到一个哈希,这应该删除它。
问题:我需要保留什么文件?或者它不存在?
顺便说一句:我已经知道 ccache 但它因一些配置更改而中断。
我正在尝试自动化重新编译升级内核的过程。(我的意思是版本升级)
我做什么:
使用 rsync 备份目标文件 (*.o)
删除目录并使 mrproper
提取新的源代码和补丁
使用 rsync 恢复目标文件
但我发现它没有意义。由于跳过编译的东西需要得到一个哈希,这应该删除它。
问题:我需要保留什么文件?或者它不存在?
顺便说一句:我已经知道 ccache 但它因一些配置更改而中断。
你做错了™ :-)
保持内核树原样并使用适当的增量补丁简单地对其进行修补。例如,对于 3.x,您可以在此处找到这些补丁:
https://www.kernel.org/pub/linux/kernel/v3.x/incr/
如果您当前已构建 3.18.11 并想升级到 3.18.12,请下载 3.18.11-12 补丁:
https://www.kernel.org/pub/linux/kernel/v3.x/incr/patch-3.18.11-12.xz
(或 .gz 文件,如果您没有安装 xz 实用程序。)
并应用它。然后“make oldconfig”和“make”。任何需要重建的都会被重建。
但是,实际上最好不要依赖对象文件依赖机制。谁知道某些东西是否最终不会被重建,即使它应该是由于一个错误。所以我建议每次在应用补丁之前都使用“make clean”开始清理,即使它会重建所有内容。
您真的非常需要节省构建时间吗?如果是,最好配置内核(“make menuconfig”)并禁用所有不需要的功能(例如您没有的硬件的设备驱动程序、您不关心的文件系统、网络您将不会使用的功能等)这样一个针对我的需要而优化的内核只需要大约 3 或 4 分钟即可构建(通常,启用所有功能的完整内核需要半个小时以上;或者这些天甚至更多,它已经自从我构建非优化内核以来已经很长时间了。)
有关内核补丁的更多信息:
https://www.kernel.org/doc/Documentation/applying-patches.txt
增量补丁是一个好方法,因为它可以正确更新时间戳。
(GNU)使用时间戳来识别重建,因此只需保留时间戳以避免重建。
如果我们需要 rsync,我们应该使用 -t 选项。
同样对于没有增量补丁的补丁,我们可以通过比较补丁文件来手动制作。