我根据 git 源重建了内核。这些是我采取的步骤:
- git 克隆 git://kernel.ubuntu.com/ubuntu/ubuntu-focal.git
- cd ubuntu-focal
- vi debian.master/changelog
- 应用补丁
- 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 分钟。我暂时保持这种状态。