作为 HomoLab 成员,怎么能不会编译 Linux 内核呢
本文所使用环境为全新安装的 Debian 12 amd64
E0: 环境准备
安装必要的工具
apt install git build-essential bc bison flex libssl-dev libncurses5-dev libelf-dev
如果需要交叉编译 arm64 或其他架构的内核,请继续安装与目标架构相符的 gcc 并设置环境变量
apt install gcc-aarch64-linux-gnu
export ARCH=arm64
export SUBARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
E1: 构建内核
拉取源码
钦定一个你喜欢的 Linux 内核仓库,拉取之
使用 shallow clone 可以有效节省拉取时间
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth=1
生成配置
在 arch/${ARCH:-x86}/configs 下查看可选的预设配置,选择一个生成 .config 配置文件
make x86_64_defconfig
如果你希望调整内核参数,请先查看 E3 小节,调整完毕后再进行编译
默认编译出的内核版本号末尾带有 +,版本号为 x.y.z+,可以通过设置 LOCALVERSION 环境变量去除
export LOCALVERSION=
也可以通过 LOCALVERSION 自定义内核版本后缀
export LOCALVERSION="-homolab"
某些预设配置编译出的内核版本号末尾还会带有当前 Git 版本哈希,可以参照 E3 小节关闭 CONFIG_LOCALVERSION_AUTO 去除
编译
make -j$(nproc)

编译完成后内核文件可在 arch/${ARCH:-x86}/boot 下找到
打包
对于 Debian 系或 Redhat 系用户,可以将内核打包成 deb/rpm 文件以便安装与管理
deb
安装打包依赖
apt install debhelper rsync
仅打包 deb
make -j$(nproc) bindeb-pkg
打包 deb 及源码
make -j$(nproc) deb-pkg
在上级目录下可以查看打包产物

rpm
apt install rpm
make -j$(nproc) binrpm-pkg
make -j$(nproc) rpm-pkg
产物可在 rpmbuild/RPMS 下查看

E2: 更换内核
直接安装
make headers_install
make modules_install
make install
包管理器安装
dpkg -i ../linux-*.deb

重启,享受自己编译的内核


E3: 调整内核参数
make menuconfig

键入 / 可以打开搜索

通过搜索结果提供的路径找到条目后,空格启用/关闭功能

完成后退出并保存
如果你已经了解想开启功能的依赖,也可以直接修改 .config 文件
E4: 后记
遥想上次写博客还是四年前,这两天心血来潮决定写点东西,分享些折腾 HomoLab 时的 case study,顺便整理了好 contribute 给上游,考虑之后想写的几篇都涉及了内核编译,遂解耦并作为复活博客后的第一篇
顺便立个小 flag,争取周更月更