为什么要自己编译内核
优点
- 定制化:你可以根据自己的硬件和需求配置内核,去掉不必要的模块,优化性能。
- 性能优化:移除不需要的驱动程序和特性,减小内核体积,提高系统性能。
- 最新特性和修复:获取最新的内核版本和特性,或者提前应用一些补丁。
- 学习机会:通过编译内核,可以更深入地理解Linux的内部工作机制。
缺点
- 复杂性:编译和配置内核需要较高的技术水平,过程复杂且容易出错。
- 时间消耗:编译内核是一个耗时的过程,尤其是在资源有限的系统上。
- 维护成本:自己编译的内核需要手动更新和维护,缺乏自动化工具的支持。
- 兼容性问题:手动配置不当可能导致硬件或软件兼容性问题,需要仔细测试。
我的感受是
- 了解到内核相关的知识,内核配置过程可以通过Kernelconfig.io[^4]网站查询。
- 提前使用到最新版本的内核,不用等论坛大佬的更新:
- 内核体积大大缩小:
过程
下载
网站下载linux内核源码[^1] [^2],并解压,进入源码目录;
linux内核:https://www.kernel.org/
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/
安装依赖
参考脚本安装依赖[^3];
shell
sudo apt install git wget fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison zstd debhelper
配置文件
- 使用现有配置文件dppve.config[^3]
shell
cp /xxx/dppve.config .config
- 精简(可选)
先让系统尽可能多地加载模块,使用工具自动保留已加载的模块[^5] [^6],可以精简掉巨量不需要的模块和驱动;
尤其是驱动,不精简时执行make可以发现,make过程里的大部分时间都是在编译drivers开头的文件;
shell
make localmodconfig
- 手动调整配置(可选)
shell
make menuconfig
- 使用ccache加速多次编译(可选)
安装配置ccache[^7] [^8];
shell
sudo apt-get install ccache
export CC="ccache gcc"
export CXX="ccache g++"
编译
这个步骤很慢,网友讲可能需要1-3个小时;
可能是我直接在实体机上编译的原因,我第一次编译大约花费25分钟;
经过localmodconfig精简、ccache后,后续编译时间一般在2-8分钟,感觉很快;
shell
make -j$(nproc)
打包deb
shell
make bindeb-pkg
安装文件在源码文件夹同级目录生成
默认配置生成的通用linux-image deb文件约80M,localmodconfig精简后约20M;

安装
安装软件包[^9],linux-libc-dev可不安装;
shell
# 查看
ls -lh ../linux-*.deb
# 安装
dpkg -i ../linux-*.deb
启用
可使用grub-customizer管理grub配置,更换内核加载
列表
设置
References
\^1\]. The Linux kernel archives. (n.d.).