快速内核重新编译
Fast kernel recompile
我正在尝试自动执行重新编译升级内核的过程。 (我是说版本升级)
我的工作:
用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选项。
另外对于没有增量补丁的补丁,我们可以通过比较补丁文件手动制作。
我正在尝试自动执行重新编译升级内核的过程。 (我是说版本升级)
我的工作:
用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选项。
另外对于没有增量补丁的补丁,我们可以通过比较补丁文件手动制作。