欢迎,来自IP地址为:44.210.83.132 的朋友


Linux 的最大吸引力是它易于定制,而定制最有趣的事情之一就是内核本身,它是 Linux 操作系统的核心要素。

事实上多数情况下我们不需要编译自己的内核,因为随发行版一起提供并通过包管理系统进行更新的版本通常就足够好了。但有时的确可能需要重新编译内核。

编译内核的原因可能是特殊的硬件需求、创建整体内核而不是模块化内核的愿望、通过删除无用的驱动程序来优化内核、运行开发内核,或者只是单纯为了了解有关 Linux 的更多知识。

本教程将在 Debian 系统上编译一个新发布的内核,其中包括几个新功能(例如显卡的新驱动程序),并对文件系统进行重大改进。

Debian 系统如何编译内核

在编译之前,我们需要安装几个依赖包,通常情况下是”build-essential”和”kernel headers”,使用如下命令完成安装:

# apt update
# apt upgrade
# apt install build-essential linux-headers-$(uname -r)

安装完成后,就可以下载内核了。浏览 Linux 内核的 >>官方网站<< 下载自己需要的内核,目前内核的最新版本为 6.8.4,下载对应的 tar 包即可。示例将演示编译最新版的内核,可以使用如下命令下载内核并准备编译:

# wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.4.tar.xz
# tar -xvf linux-6.8.4.tar.xz
# cd linux-6.8.4/

现在,我们就可以开始配置内核了,建议从当前使用的配置开始并在其基础上构建。为此,将现有配置从”/boot”目录复制到当前工作目录并将其另存为”.config”文件:

# cp /boot/config-`uname -r` .config

在实际的配置过程,可以选择使用如下两种方式:

  • 如果安装了 X11,可以运行 make xconfig,这样会有一个漂亮的 GUI 菜单来引导我们配置内核
  • 如果在 CLI 环境中运行,则可以运行 make menuconfig,但需要安装 libncurses5-dev 软件包才能使用它

示例将使用 CLI 环境,于是需要安装 libncurses5-dev 软件包以启动内核配置过程,命令如下:

# apt install libncurses5-dev
# make menuconfig

如果报错,是因为系统未安装对应的依赖软件包,使用如下命令解决:

# apt install flex bison

依赖包安装成功后,再次执行”make menuconfig”命令,就会出现如下界面:

如图所示,一旦选择了自行配置,内核就会有大量不同的选项可以使用。事实上,对于本教程的范围来说,选项显得太多了。

选择内核选项时,最好的方法是反复试验,遇到不明白的地方则求助于网络,这是最好的方法。但是,如果只是想将内核更新到最新版本,则无需更改任何内容。只需选择”<Save>”即可,因为我们将当前内核的配置文件复制到新内核的”.config”文件中了。

需要特别注意的是,编译选项的”Enable loadable module support“中的”Forced module loading”选项需要选中,否则如果使用了内核模块,会引发错误。

示例不对内核配置作任何修改,只编译生成最新版的内核,选择”<Save>”菜单项保存配置:

现在,使用如下命令启动内核编译过程。该过程将编译内核、安装模块并将必要的文件复制到”boot”目录:

# make
# make modules_install
# make install

编译过程中,如果出现报错提示缺少依赖包,则安装相应依赖包,命令如下:

# apt install libssl-dev bc libelf-dev python3 dwarves

如果报错提示”gcc: fatal error: Killed signal terminated program cc1″,则表示系统内存不足,需要扩充内存或增加交换空间,建议内存不低于 4GB。

编译过程根据主机性能耗时有所不同,总体比较长。编译的三条命令全部正确执行未出现报错,直到出现如下提示,则表示内核已经编译成功。

编译成功后,就可以重新启动主机,在 GRUB 启动菜单选择使用新编译的内核引导启动主机:

务必注意启动过程中出现的任何错误消息,以便解决相应的适配问题。

系统启动成功后,可以使用如下命令检查 Debian 的内核版本:

# uname -r

如果想查看已安装内核的列表,可以检查 /boot 目录的内容:

# ls -lh /boot

至此,就已经成功编译安装了最新版的内核到 Debian 系统。

Debian 系统删除旧内核

既然新内核已经成功安装并正常工作,就可以考虑删除 Debian 系统的旧内核以节省启动分区空间。

使用如下命令可以显示当前已经安装的内核:

# dpkg --list | grep linux-image

要删除不需要的内核,则可以使用如下命令:

# apt purge linux-image-OLD_VERSION

其中”OLD_VERSION”是前条命令显示出来的内核版本号,例如”linux-image-6.1.0-13-amd64″。

内核删除完成后,记得使用如下命令更新 GRUB 配置,以免引起启动故障:

# update-grub

总之,在 Debian 系统中编译内核是一项宝贵的技能,它允许用户根据特定需求定制操作系统,融入最新的功能和进行系统优化。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注