自己编译 Linux 内核,好像一点用都没有?
前言
貌似最近干搬运工,播放量有点少。也许是因为我那个视频口无遮拦吧:-P
创世纪乐队的专辑介绍打破了我搬运视频播放量的记录,而LGR视频播放量也不尽如人意。
所以大家给点支持吧/可怜

对了,以后我还会翻译视频的,而我博客更新的东西也都会放到B站,但鉴于这编辑器功能太差(怎么打表格之类),我不会都搬运过来。请大家去我的网站去看吧。
https://www.superbart.xyz/p/complie-linux-kernel-is-useless.html
目录
为什么我要自己编译内核~ Linux 内核的多元化
为啥自己编译没用~性能对比和优劣势对比
如何加速内核编译~使用 modprobed-db 精简驱动模块
我到底配置了啥~给大家看看我改过的内核配置
结尾
为什么我要自己编译内核~ Linux 内核的多元化
很简单,下学期我有门课,叫“操作系统”,据说需要编译内核。实际上我之前编译过,但是我没有接触过设置,这回想看看我能设置啥。
不过我最讨厌学习了,所以接下来的才是真正原因233
我玩《黑山起源》,玩起来很卡。游戏设置当然是调了,但根据我之前压制视频,我觉得是内核没有把我的核显和 CPU 压榨干净(我的电脑是轻薄本)。之前看过很多帖子,说用了特制内核,跑起来能快一些。
这里,我提到了“特制内核”。因为 Linux 内核是开源的,自然,有人魔改了很多版本。这里介绍四个版本:
长期支持版(LTS),为了稳定而优化的版本,相当于 Windows 的 LTSC 版。一般出现在 CentOS 和 Ubuntu 上面。
linux-zen,为了桌面电脑而进行过性能优化。我日用这个版本。
linux-hardened,为了系统安全而优化的版本。
linux-libre,为了代码的绝对自由而砍掉了很多驱动。
当然,如果你是为了应付操作系统实验,我建议你还是使用原版吧。首先,网上教程丰富,其次,代码简单易得。
为啥自己编译没用~性能对比
鉴于我编译内核,最主要的出发点是加速游戏运行,自然我得提供这方面的数据了。
我的自制内核,基于 linux-zen 内核,精简了很多没必要的驱动,以及在电脑管理模块强制使用性能模式,并根据我的处理器型号(AMD Ryzen 4750U),使用了"Zen 2"性能优化。
以下跑分均在我的电脑上进行,型号是 Thinkpad T14 ,系统是最新的 Arch Linux ,在接电情况下进行。
(跑分成绩请见我博客,啥时候Bilibili支持表格啊)
由上可见,虽然自编译内核相较原版内核,有一定的性能提升,但是提升幅度不大。而我还发现,使用强制性能模式会导致电脑风扇长时间运行,CPU 过热现象明显。而在新内核下运行《黑山起源》,我觉得流畅度有些微提升,至少没有之前那么卡了。但是我高度怀疑这是某种安慰剂效应。
所以,自行编译内核并没有达到我的需求。但这不意味着我白搞了一通,至少编译内核速度快了。 好了,进入我这篇文章的宝藏部分捏。
如何加速内核编译~使用 modprobed-db 精简驱动模块
modprobed-db是一个 bash 脚本,他能侦测你系统目前所使用的模块,并记录下来。在编译内核的时候,程序只会编译我们使用过的驱动模块,加速编译速度,减少内核体积。
注意:使用这个软件,可能会精简驱动过头,导致使用不便。请各位打算使用前,最好稍微了解一下内核配置选项。本人仅在Arch Linux下运行过这个软件,如果你用的是Ubuntu等系统,使用有问题的话,请跟我说一下。
过一下编译内核的一般步骤
电脑装好编译环境,一般包括 gcc,make 等。Arch Linux 是要安装上
base-devel
软件包组和gcc
。你需要拖下来最新稳定版的内核源代码,然后进入源代码文件夹:
3. 使用以下任意一个命令,配置内核参数:
注意: 很多教程是用make config配置内核,本人不推荐。界面太原始了,而且在Arch Wiki上面被标记为"被nconfig取代"
4. 使用 make -j$n
命令编译,这里 $n
代表你电脑/虚拟机的核心数。
5. 使用以下两个命令来安装内核:
6. 重启到新内核,如果没有的话,查看系统引导器设置。
使用 modprobed-db 精简内核
获取 modprobed-db 软件。Arch Linux 用户可以使用 AUR 直接安装
modprobed-db
软件包。如果不是的话,根据该软件 Github 所介绍:
2. 获取目前你电脑正在挂载的模块:
3. 在编译内核的时候,配置内核参数部分,执行这个命令来关掉不需要的模块编译开关。然后编译安装即可。
使用提示
如果你是实机运行的话,务必把所有你要使用的设备都使用上。这里我翻译一下 Arch Wiki 的原文:
挂载上所有需要用到的文件系统
接上所有需要用到的可移动媒体,比如U盘,光驱等
以上选项包括挂载 ISO 文件,这个涉及到 loop 模块和 isofs 模块
使用电脑上的所有设备,例如网卡,输入设备,电脑摄像头,移动设备等
使用电脑上的所有应用程序,有些程序是需要特定内核模块来运行的,比如虚拟机
在不同版本/特制的内核上运行 modprobed-db,也许会录入一些其他内核没有的模块
我当时没有插上我的光驱,就运行了这个,结果新内核没法读我的光驱:-P
我到底配置了啥~给大家看看我改过的内核配置
我上面说过,使用 modprobed-db 的前提是对内核配置有一定了解,至少需要看到选项的时候,脑瓜不疼。(如果你是应付操作系统实验,我看我们学校的操作系统资料和小梦哥哥的实验总结的步骤,我觉得你要是在虚拟机下直接搞,应该没有问题)
所以,我来给大家看一下我的内核配置吧,给大家看看我改了什么。这里我用 make nconfig
配置。
第一个选项是总体选项,是包括了内核压缩,特定版本号之类的信息。请看xmgg的吧。





其他方面,诸如支持32位可执行程序,内核安全算法,调试选项等,我就不说啦。
结尾
虽然自己编译内核,没有使游戏性能有很大提升😶
但是我由此得到了提升内核编译的一个途径,这要将来节省时间卷过别人不就很方便了吗🥰
实际上我还给内核打上了中文补丁,不过网上很多教程,我就不在这说了。给大家个链接看看吧。没记错命令是 patch -Np1 < 补丁文件
。
我还使用了 Arch Linux 的包管理工具,让整个过程更简单。具体看这个。
推荐阅读
https://wiki.archlinux.org/title/Kernel/Traditional_compilation Arch Wiki提供的编译内核指南(多系统适用哦)
https://moefactory.com/3041.moe 小梦哥哥教大家操作系统实验啦
https://github.com/LevickCG/Happy-SE-in-XDU/tree/master/OS 我校软工快乐学习(不是)
SuperBart 2022-02-11 Licensed under CC BY-SA 4.0