记录一下踩的坑
1. 编译前准备
1.1 下载源码
请在 kernel.org 下载 tar 包并解压到 ~/linux-x.y.z
目录。
1.2 安装编译工具链
正常来说,需要安装的编译工具链为:
1 | sudo apt install libncurses5-dev build-essential openssl flex bison libssl-dev libelf-dev |
其次,6.8 版本还需要安装如下两个工具来支持对应特性:
1 | sudo apt install dwarves # 支持 BTF 选项 |
当然,这里我用的是 Clang-12 编译的,而不是 gcc。Linux 6.8 以后不推荐使用 Clang-12 而是 Clang-13 以上版本,但是用 Clang-12 也不会报错,Linux 6.9 就会直接报错了。
2. 编译
2.1 config 阶段
最重要的,把 Ubuntu 的 config 复制过来:
1 | cp /usr/src/linux-headers-5.15.0-107-generic/.config ~/linux-x.y.z/.config |
由于 5.15 和 6.8 版本内核的选项有很多变化,后面编译的时候会弹出很多问题要确认,建议一路回车,这么多也看不过来…
然后,make menuconfig
修改你自己想要的选项。
2.2 编译镜像
1 | make -j$(nproc) CC=clang-12 |
报错过程中有很多坑,下面列出一些常见的:
BTF 与 zstd 报错,缺少第一章中提到的 dwarves 与 zstd 工具,或者关掉 BTF 与 zstd 选项也可以。
certs 有关报错:Debian 系都会验证签名,修改
.config
文件中的如下选项:1
2CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOVATION_KEYS=""栈溢出
error: the frame size of xxxx bytes is larger than 1024 bytes
。在.config
中调整栈大小即可。1
CONFIG_FRAME_WARN=XXXX # 4096 或者 8192
2.3 安装
1 | make modules_install |
没报错的话直接重启即可选择系统