如果我之前已经编译了所有内容,那么我该如何构建内核而不进行编译?

如果我之前已经编译了所有内容,那么我该如何构建内核而不进行编译?

我根据 git 源重建了内核。这些是我采取的步骤:

  1. git 克隆 git://kernel.ubuntu.com/ubuntu/ubuntu-focal.git
  2. cd ubuntu-focal
  3. vi debian.master/changelog
  4. 应用补丁
  5. fakeroot debian/规则清理二进制头二进制通用

如果我随后应用另一个补丁并想再次编译同一版本,则会收到错误,因为某些文件夹不为空。我可以发出“fakeroot debian/rules clean”来解决这个问题,但随后我需要编译整个内核。

有没有办法只重新编译更改的文件并基于此构建 deb?这似乎是一件微不足道的事情,我还没有弄清楚。

答案1

所以它并不完全是我想要的,但由于我主要想节省一些时间并节省磁盘空间,因此我采用了基于 ccache 的指导。

我使用描述的方法这里编译内核,但我从 GregKH 的稳定树中提取源代码。

我将其添加到.bashrc:

export CCACHE_DIR="/scrap/ccache"
export CC="ccache gcc"
export CXX="ccache g++"
export PATH="/usr/lib/ccache:$PATH"

但似乎我必须在调用构建时添加参数:

CC="ccache gcc" fakeroot debian/rules binary-headers binary-generic

2 次相同构建后的结果看起来不错(从空缓存开始,然后对缓存中的所有内容进行构建,总共等于 50% 的命中率):

缓存命中(直接) 20354
缓存命中(预处理) 81
缓存未命中 20411
缓存命中率 50.03%
调用链接 94
调用预处理 148
不支持的代码指令 12
无输入文件 1329
执行清理 0 个
缓存文件 61169
缓存大小 7.3 GB
最大缓存大小 16.0 GB

常规内核构建耗时略多于一小时。第一次 ccache 运行(填充缓存)耗时 95 分钟。第二次构建耗时 30 分钟。我暂时保持这种状态。

相关内容