欢迎光临散文网 会员登陆 & 注册

自己编译 Linux 内核,好像一点用都没有?

2022-02-13 00:45 作者:Superbart  | 我要投稿

前言

貌似最近干搬运工,播放量有点少。也许是因为我那个视频口无遮拦吧:-P

创世纪乐队的专辑介绍打破了我搬运视频播放量的记录,而LGR视频播放量也不尽如人意。

所以大家给点支持吧/可怜

对了,以后我还会翻译视频的,而我博客更新的东西也都会放到B站,但鉴于这编辑器功能太差(怎么打表格之类),我不会都搬运过来。请大家去我的网站去看吧。

https://www.superbart.xyz/p/complie-linux-kernel-is-useless.html

目录

  • 为什么我要自己编译内核~ Linux 内核的多元化

  • 为啥自己编译没用~性能对比和优劣势对比

  • 如何加速内核编译~使用 modprobed-db 精简驱动模块

  • 我到底配置了啥~给大家看看我改过的内核配置

  • 结尾

为什么我要自己编译内核~ Linux 内核的多元化

很简单,下学期我有门课,叫“操作系统”,据说需要编译内核。实际上我之前编译过,但是我没有接触过设置,这回想看看我能设置啥。
不过我最讨厌学习了,所以接下来的才是真正原因233
我玩《黑山起源》,玩起来很卡。游戏设置当然是调了,但根据我之前压制视频,我觉得是内核没有把我的核显和 CPU 压榨干净(我的电脑是轻薄本)。之前看过很多帖子,说用了特制内核,跑起来能快一些。
这里,我提到了“特制内核”。因为 Linux 内核是开源的,自然,有人魔改了很多版本。这里介绍四个版本:

  1. 长期支持版(LTS),为了稳定而优化的版本,相当于 Windows 的 LTSC 版。一般出现在 CentOS 和 Ubuntu 上面。

  2. linux-zen,为了桌面电脑而进行过性能优化。我日用这个版本。

  3. linux-hardened,为了系统安全而优化的版本。

  4. linux-libre,为了代码的绝对自由而砍掉了很多驱动。

当然,如果你是为了应付操作系统实验,我建议你还是使用原版吧。首先,网上教程丰富,其次,代码简单易得。

为啥自己编译没用~性能对比

鉴于我编译内核,最主要的出发点是加速游戏运行,自然我得提供这方面的数据了。
我的自制内核,基于 linux-zen 内核,精简了很多没必要的驱动,以及在电脑管理模块强制使用性能模式,并根据我的处理器型号(AMD Ryzen 4750U),使用了"Zen 2"性能优化。
以下跑分均在我的电脑上进行,型号是 Thinkpad T14 ,系统是最新的 Arch Linux ,在接电情况下进行。

(跑分成绩请见我博客,啥时候Bilibili支持表格啊)

由上可见,虽然自编译内核相较原版内核,有一定的性能提升,但是提升幅度不大。而我还发现,使用强制性能模式会导致电脑风扇长时间运行,CPU 过热现象明显。而在新内核下运行《黑山起源》,我觉得流畅度有些微提升,至少没有之前那么卡了。但是我高度怀疑这是某种安慰剂效应。
所以,自行编译内核并没有达到我的需求。但这不意味着我白搞了一通,至少编译内核速度快了。 好了,进入我这篇文章的宝藏部分捏。

如何加速内核编译~使用 modprobed-db 精简驱动模块

modprobed-db是一个 bash 脚本,他能侦测你系统目前所使用的模块,并记录下来。在编译内核的时候,程序只会编译我们使用过的驱动模块,加速编译速度,减少内核体积。

注意:使用这个软件,可能会精简驱动过头,导致使用不便。请各位打算使用前,最好稍微了解一下内核配置选项。本人仅在Arch Linux下运行过这个软件,如果你用的是Ubuntu等系统,使用有问题的话,请跟我说一下。

过一下编译内核的一般步骤

  1. 电脑装好编译环境,一般包括 gcc,make 等。Arch Linux 是要安装上 base-devel 软件包组和 gcc 。

  2. 你需要拖下来最新稳定版的内核源代码,然后进入源代码文件夹:

  3. 使用以下任意一个命令,配置内核参数:

注意: 很多教程是用make config配置内核,本人不推荐。界面太原始了,而且在Arch Wiki上面被标记为"被nconfig取代"

  4. 使用 make -j$n 命令编译,这里 $n 代表你电脑/虚拟机的核心数。

  5. 使用以下两个命令来安装内核:

  6. 重启到新内核,如果没有的话,查看系统引导器设置。

使用 modprobed-db 精简内核

  1. 获取 modprobed-db 软件。Arch Linux 用户可以使用 AUR 直接安装 modprobed-db 软件包。如果不是的话,根据该软件 Github 所介绍:

     2. 获取目前你电脑正在挂载的模块:

     3. 在编译内核的时候,配置内核参数部分,执行这个命令来关掉不需要的模块编译开关。然后编译安装即可。

使用提示

如果你是实机运行的话,务必把所有你要使用的设备都使用上。这里我翻译一下 Arch Wiki 的原文:

  • 挂载上所有需要用到的文件系统

  • 接上所有需要用到的可移动媒体,比如U盘,光驱等

  • 以上选项包括挂载 ISO 文件,这个涉及到 loop 模块和 isofs 模块

  • 使用电脑上的所有设备,例如网卡,输入设备,电脑摄像头,移动设备等

  • 使用电脑上的所有应用程序,有些程序是需要特定内核模块来运行的,比如虚拟机

  • 在不同版本/特制的内核上运行 modprobed-db,也许会录入一些其他内核没有的模块

我当时没有插上我的光驱,就运行了这个,结果新内核没法读我的光驱:-P

我到底配置了啥~给大家看看我改过的内核配置

我上面说过,使用 modprobed-db 的前提是对内核配置有一定了解,至少需要看到选项的时候,脑瓜不疼。(如果你是应付操作系统实验,我看我们学校的操作系统资料和小梦哥哥的实验总结的步骤,我觉得你要是在虚拟机下直接搞,应该没有问题)
所以,我来给大家看一下我的内核配置吧,给大家看看我改了什么。这里我用 make nconfig 配置。
第一个选项是总体选项,是包括了内核压缩,特定版本号之类的信息。请看xmgg的吧。

在默认界面,配置程序给了我们一些选项。下面的功能键中,F2可以查看配置选项的详细信息,F9可以搜索配置选项。
这个地方是配置处理器相关信息的。我这里把很多因特尔处理器的独家特性给删掉了,然后处理器优化强制设置为Zen 2。其他方面的有任务调度之类,我没有动,因为不懂。
这个地方配置电源管理,我开启了休眠和睡眠,然后将CPU频率调整设置为"性能"。
这个地方配置文件系统支持,是精简内核的重中之重,也是一个坑。如果精简过头,可能插个U盘读不出来。尤其注意CD文件系统和DOS文件系统选项。
这个地方配置驱动选项,基本上编译内核,大部分时间都是在编译驱动。所以,这个地方我们可以大开杀戒。不过千万不要要把你需要用到的驱动给去了。

其他方面,诸如支持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

自己编译 Linux 内核,好像一点用都没有?的评论 (共 条)

分享到微博请遵守国家法律