Rocky Linux构建、安装自定义内核

2024-09-27 17

众所周知,Linux是一个内核,当大家谈及Linux时,通常指的是”Linux发行版”。例如Rocky Linux和Debian是Linux发行版的类型。 发行版使用独立于Linux的各种开源项目的代码。本篇教程主要介绍获取Rocky Linux内核源代码树、配置它、编译它,最后安装和引导内核的过程。

注意:Rocky Linux不支持内核重建,在建立一个定制的内核或者考虑建立之前,请注意一下条件:

  • 需要的功能是否可以通过安装 [elrepo](https://elrepo.org) 中的内核模块来实现?
  • 你需要的功能,是否可以作为内核本身的一个独立模块?
  • Rocky Linux 和大多数其他 EL 衍生工具,都是作为一个完整的环境来设计的。 更换关键部件会影响系统的运行。
  • 大多数用户不再需要构建自己的内核。 可能只需要一个内核模块/驱动程序,或者构建自己的内核模块(kmod/dkms)。

一、内核介绍

Linux内核是操作系统的核心部分。虽然内核在整个Linux发行版中只是一个小组件,但它是最关键的部分。如果内核出现故障或崩溃,系统的其他部分也会随之受到影响。

二、Rocky Linux内核源代码

每个Linux发行版都有其支持的特定内核版本源代码,包括编译的二进制文件(.src.rpm)、源代码RPM(.srpm)等多种形式。如果你需要下载与当前Rocky Linux版本不同的内核版本(如更新版本),可以首先访问官方内核网站:[www.kernel.org](http://www.kernel.org)。该网站维护着内核源代码及大量其他开源软件的镜像列表,镜像地址为:[mirrors.kernel.org](http://mirrors.kernel.org)。

在接下来的教程中,下载、配置和编译Linux内核的大部分工作可以以非特权用户身份完成,而实际安装或修改系统文件和二进制文件的最后步骤则需要使用高权限。我们通过使用特殊的内核构建选项,可以指定自定义工作或输出目录,以便不需要根权限即可完成大部分工作。

具体而言,本文将使用 “O=~/build/kernel” 选项来处理所有适用的构建操作。此处的 “~/build/kernel” 等同于 “/home/$USER/build/kernel” 或 “$HOME/build/kernel”。

三、内核版本和命名约定

在网站上,会看到可用内核对应的文件夹,例如 v1.0、v2.5、v2.6、v3.0、v3.x、v4.x、v5.x 和 v6.x。在急于获取最新版本之前,了解Linux内核版本系统的工作原理十分重要。

目前的惯例是将主要的新内核版本命名为“Linux 5.x”(通常被称为vanilla或主线内核)。例如,这个系列的第一个版本是Linux 5.0(也可视为5.0.0),随后的版本依次为Linux 5.1(5.1.0)、Linux 5.2等。

稳定点发布:如某一系列内核的下一个稳定点版本将是Linux 5.0.1,然后是Linux 5.0.2,以此类推。例如,Linux 5.0.4是基于Linux 5.0.0系列的第四个稳定版本。

四、安装必备工具和库

在构建内核的过程中,常见的故障往往源于缺乏必要的编译和构建工具。缺少的软件可以通过Rocky Linux系统中的DNF软件包管理器进行安装。在Rocky Linux上,可以运行以下命令来快速获得大多数必要的开发工具:

sudo dnf -y groupsinstall "C 开发工具和库"

如果遇到类似“模块或组 ‘C 开发工具和库’不可用”的错误,可以尝试:

sudo dnf -y groupsinstall '开发工具'

其他一些可能需要的库、头文件和应用程序,可以通过安装以下软件包获得:

sudo dnf -y install \
ncurses-devel openssl-devel elfutils-libelf-devel python3

接下来需要启用某些第三方仓库,如Powertools仓库。输入以下命令:

sudo dnf config-manager --set-enable powertools

最后从Powertool仓库安装所需的软件包:

sudo dnf -y install dwarves

五、下载和解压Linux内核

接下来,我们将构建的内核版本是6.5.7,可以从以下网址获取:

www.kernel.org/pub/linux/kernel/v5.x/linux-5.16.9.tar.xz

开始这一过程。首先,使用以下 “curl” 命令下载所需的内核源到当前工作目录:

curl -L -o linux-5.16.9.tar.xz \
https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.16.9.tar.xz

当你下载的内核源是一个压缩包时,你需要解压和解包来使用源代码。确保你在下载Kernel tarball的目录中,然后使用 “tar” 命令来解压和解包文件,运行:

tar xvJf linux-5.*.tar.xz

这样就准备好进行内核的配置和构建了。

六、构建内核

与macOS或Windows等操作系统的预配置特性不同,Linux的设计理念允许用户决定内核的重要部分。这种个性化的设计让用户可以根据特定需求定制功能,从而使Linux能够在各种硬件设置中高效运行,从低端系统到嵌入式系统,甚至到高端系统。

1、构建内核的主要步骤

  • 应用安全或错误修复:如果安全性问题或错误影响了系统,必须应用相关修复;
  • 进行编译:通过编译将配置好的内核源代码转化为可用的内核模块。

在运行Linux的系统中,可以使用类似”lspci”、”lshw”等命令,显示系统上确切安装的硬件的详细信息。对于基于RPM的系统,这些实用程序由”pciutils.rpm”和”lshw.rpm”软件包提供,因此需要准备一个硬件清单。

2、准备构建环境

在开始实际配置之前,我们需要确保我们的构建环境是干净的。Linux内核源树中包含多个名为Makefile的文件,这些Makefile用于将构成内核源代码的成千上万个文件连接在一起。更重要的是,Makefile还定义了可执行的目标,这些目标是Make执行的命令。

如果系统运行稳定且良好,通常没有升级内核的必要。需要考虑的情况有:

  • 应用影响系统的安全或错误修复;
  • 在稳定版本中需要特定的新功能。

例如某个未使用的设备驱动程序发现安全问题,可能并不需要升级;而对于错误修复,若与实际使用无关,也无必要去升级内核。应具备充分的理由,而不是仅仅追求“最新内核”。

3、清理构建环境命令

在本节中,为了配置内核,我们将使用以下命令之一:

  • “make mrproper”:清除先前构建中遗留的所有文件和依赖,从构建环境中彻底移除所有以前内核的配置;
  • “make clean”:尽管这也会删除大多数生成的文件,但不会移除内核配置文件(.config);
  • “make menuconfig”:在文本界面中配置内核的命令,所有的菜单、选项列表和对话框都可以直观操作。

更多的配置选项包括:

  • “make xconfig”:基于GUI的内核配置工具,依赖于Qt库;
  • “make gconfig”:同样为基于GUI的工具,但依赖于GTK+库;
  • “make olddefconfig”:使用当前目录中的.config文件来更新依赖关系,将新符号设置为默认值;
  • “make help”:显示所有其他可能的目标,提供在线帮助。

4、内核配置

要清理并准备构建环境,我们先进入内核源代码目录,并使用”make mrproper”命令:

cd linux-5.*
make O=~/build/kernel mrproper

接下来将详细介绍配置Linux 5.x系列内核的过程。我们将重点启用对NTFS文件系统的支持,这是一项在现代Linux系统中常见的需求。通常大多数现代Linux发行版会在其文件系统中提供运行内核的配置文件,通常位于”/boot”目录下,命名为类似”config-4.*”的格式。该配置文件列出了构建时启用的特性和选项。为了高效地构建配置文件,我们将参考已存在的文件。接下来的步骤将帮助逐步配置内核。

首先将已知的配置文件复制到我们的内核构建环境中,并重命名为”.config”:

cp /boot/config-$(uname -r) ~/build/kernel/.config

这里”uname -r”命令有助于获取当前运行的内核版本,以确保获取到正确的配置文件,避免因存在多个版本而混淆。

5、启动内核配置工具

要配置 Linux 5.* 系列内核以支持 NTFS 文件系统,可以按照以下步骤操作:

  • 复制现有的配置文件到构建环境:
cp /boot/config-$(uname -r) ~/build/kernel/.config
  • 启动图形内核配置工具:
make O=~/build/kernel menuconfig
  • 在主配置屏幕上,导航到文件系统部分,然后选择 DOS/FAT/NT 文件系统;

Rocky Linux构建、安装自定义内核

  • 在 DOS/FAT/NT 文件系统部分中,导航到 NTFS 文件系统支持;
  • 输入 M (大写)以便通过模块支持 NTFS 文件系统;
  • 使用箭头键导航到 NTFS 调试支持 (NEW),然后按 y 将其包括在内;
  • 使用箭头键导航到 NTFS 写支持,然后按 y 将其包括在内;完成时字母M或星号 (*) 应该在每个选项旁边显示,如显示在这里:

Rocky Linux构建、安装自定义内核

  • 保存更改并退出内核配置实用程序;
  • 编辑 Makefile,将 EXTRAVERSION 变量更改为:

EXTRAVERSION = -custom

编译内核:

make O=~/build/kernel

安装内核模块:

sudo make O=~/build/kernel modules_install

完成这些步骤后,将在 “/lib/modules/” 目录下看到一个名为 “5.16.9-custom” 的目录,其中包含已编译的内核模块。

七、安装内核

假设正在使用一台PC,当前目录为 “~/build/kernel/”,在上一次练习中创建的编译内核就位于此目录中。确切地说,内核镜像可以在 “<kernel-build-dir>/arch/x86/boot/bzImage” 查找,在本示例中为 “~/build/kernel/arch/x86/boot/bzImage”。

在系统出现错误并生成“Oops”消息时,”System.map” 文件是非常有用的。某些内核错误可能是由内核缺陷或硬件故障引起的,这些错误类似于Microsoft Windows中的蓝屏死机(BSOD)。错误信息会详细包括当前系统状态的信息和几个十六进制数字。

“System.map” 使Linux能够将这些十六进制数字转换为可读的名称,从而方便调试。虽然这主要是为了开发人员的便捷,但在需要报告问题时也会很有帮助。

1、安装新内核镜像

接下来,我们将执行所需的步骤,以安装新的内核镜像。

首先在内核构建目录的根目录中,将 “bzImage” 文件复制并重命名到 “/boot” 目录中:

sudo cp ~/build/kernel/arch/x86/boot/bzImage /boot/vmlinuz-<kernel-version>

在这里,”<kernel-version>” 是内核版本号。对于我们本指南中使用的示例内核,文件名将是 “vmlinuz-5.16.9-custom”。因此,具体命令为:

sudo cp ~/build/kernel/arch/x86/boot/bzImage /boot/vmlinuz-5.16.9-custom

2、System.map文件的复制

现在内核镜像已经就位,接下来我们需要将相应的 “System.map” 文件复制并重命名到 “/boot” 目录,使用相同的命名约定:

sudo cp -v ~/build/kernel/System.map /boot/System.map-5.16.9-custom

3、使用kernel-install

一旦内核和系统映射文件都就位,我们就可以迈出最后一步,使用以下命令来安装内核:

sudo kernel-install add 5.16.9-custom /boot/vmlinuz-5.16.9-custom

“kernel-install” 命令是一个简单的 shell 脚本,可能并非所有Linux发行版都预装,但在较新的 Fedora、RHEL 和 CentOS 版本中都能找到。该工具可以自动完成许多我们通常需要手动完成的设置工作,使系统能够启动我们刚刚编译的新内核。

具体而言,该工具会执行以下操作:

  • 创建初始RAM文件系统图像(initramfs image),即 “/boot/initramfs-.img” 文件;
  • 如果需要手动执行此操作,可以使用 “mkinitramfs” 命令;
  • 运行深度模块命令,以创建模块依赖列表;
  • 更新引导加载器配置:

对于使用新的 GRUB2 的系统,该配置文件通常是 “/boot/grub2/grub.cfg”。在基于 EFI 的系统上,还会更新 “/boot/efi/fedora/grub.cfg”;对于老旧版本的 GRUB,文件路径可能是 “/boot/grub/grub.conf” 或 “/boot/grub/menu.lst”。

此外如果使用的是BLS(Boot Loader Specification)进行最新磁盘的管理,则新的引导条目会添加到 “/boot/loader/entries/” 目录中,或者在由变量 “blsdir” 指定的任何目录中。

4、查看新创建的引导条目

在基于 EFI 的 Rocky 服务器上,当使用 BLS 运行 GRUB2 时,新的引导条目会在以下路径创建:

sudo cat /boot/loader/entries/6fa25ca775f64accb0d3e53f0e4e6e92-5.16.9-custom.conf

该配置文件的内容将显示类似于:

title Rocky Linux (5.16.9-custom)
version 5.16.9-custom
linux /vmlinuz-5.16.9-custom
initrd /initramfs-5.16.9-custom.img $tuned_initrd
options $kernelopts $tuned_params
id rocky-202202120135-5.16.9-custom

八、启动自定义内核

完成上述步骤后,可以重启系统并在引导菜单中选择新内核:

sudo reboot

系统重启后,可以使用 “uname” 命令来确认当前运行的内核版本:

uname -r

如果返回的是 “5.16.9-custom”,说明成功启动了新内核。

接下来可以使用以下命令检查新内核是否支持NTFS文件系统:

modinfo ntfs

查询结果应显示与NTFS模块相关的信息,例如文件路径、许可证和版本号,以确保支持已成功添加。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。