You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在二次编译内核时阻止make执行clean操作?

解决内核编译后生成Debian包时重复编译的问题

嘿,这个坑我太熟了!内核的Debian打包规则默认会触发清理操作,尤其是当你第一次用fakeroot执行打包命令时,很容易把之前编译好的目标文件清掉,白忙活半天。下面给你几个靠谱的解决办法:

方法一:用内核Makefile的内置变量跳过清理

内核的Makefile其实提供了直接跳过清理的参数,你只需要在执行打包命令时加上NO_CLEAN=1就行,比如:

make -j$(nproc) bindeb-pkg NO_CLEAN=1

这里bindeb-pkg是专门生成二进制Debian包的目标(比deb-pkg少了源码包,速度更快),NO_CLEAN=1会告诉Makefile不要执行任何清理步骤,直接复用你之前编译好的所有目标文件。

如果这个变量在你的内核版本里不生效,可以试试SKIP_CLEAN=1,有些旧版本内核用的是这个变量。

方法二:直接调用Debian规则的二进制打包步骤

如果上面的参数不管用,你可以绕开make deb-pkg的顶层目标,直接调用Debian打包脚本的核心步骤——前提是你已经完成了内核的配置和编译(也就是之前的make -j$(nproc)已经成功跑完)。

直接执行这条命令:

fakeroot debian/rules binary

这条命令会直接触发Debian包的构建流程,不会触发顶层Makefile的清理操作,完美复用已有的编译产物。

方法三:先确认编译状态,避免误操作

在执行打包前,先检查一下之前的编译产物是否还在:

  • 看看内核源码目录下的vmlinuxarch/$(uname -m)/boot/vmlinuz这些文件是否存在
  • 检查debian目录下有没有生成临时的构建文件

如果这些文件都在,那上面的方法肯定能生效;如果已经被清理了,那只能重新编译一次,之后马上用上面的命令打包。

额外提示

  • 尽量用bindeb-pkg代替deb-pkg,除非你真的需要源码包,前者的打包流程更简单,出错概率更低
  • 执行命令时加上-j$(nproc)可以利用多核CPU加速打包过程,节省时间

如果还是遇到问题,你可以把make -n bindeb-pkg的输出贴出来,我帮你排查具体是哪个步骤触发了清理!

内容的提问来源于stack exchange,提问作者Poperton

火山引擎 最新活动