开发者
资源
openEuler内核编译
openEuler内核编译
发表于2025/04/23
1250

openEuler内核编译

openEuler Kernel Compilation

本案例在鲲鹏平台上编译、安装openEuler操作系统所用内核,从而为后续的内核模块编程(Kernel Module Programming)打下基础。

🏷 术语

鲲鹏云是“华为云鲲鹏云”的简称,本实验的鲲鹏平台是鲲鹏云ECS(也称鲲鹏弹性云服务器,Kunpeng Elastic Cloud Server,KECS)。

🔒🗝 何时使用root身份

为系统安全起见,进行应用编程实验时,我们一般以非root用户登录,但在进行内核编译、安装和内核模块编程实验时,为方便起见(不用频繁输入sudo命令),我们以root身份登录。

1. 准备环境

本例的运行环境是基于鲲鹏处理器的华为云ECS(Elastic Cloud Server,弹性云服务器),所用规格如下:

16 vCPUs | 64 GiB | kc1.4xlarge.4
openEuler 20.03 64bit with ARM

注意:运行该示例并不需要如此高的配置,这里选择这么高的配置只为加快编译内核代码的速度。

我们可以用uname命令查看系统运行环境:

uname -m # aarch64
uname -r # 4.19.90-2110.8.0.0119.oe1.aarch64
uname -a # Linux kmp 4.19.90-2110.8.0.0119.oe1.aarch64 #1 SMP Wed Oct 27 10:35:51 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

查看操作系统版本:

cat /etc/os-release

本例的输出如下所示:

cat /etc/os-release
NAME="openEuler"
VERSION="20.03 (LTS)"
ID="openEuler"
VERSION_ID="20.03"
PRETTY_NAME="openEuler 20.03 (LTS)"
ANSI_COLOR="0;31"

现在我们来准备编译内核的环境:

yum group install -y "Development Tools"
yum install -y bc
yum install -y openssl-devel

注意:如果在安装的过程中出现“Error: GPG check FAILED”错误则可在yum install命令后增加--nogpgcheck选项,例如:

yum group install -y "Development Tools" --nogpgcheck

2. 备份

备份boot目录以防后续步骤更新内核失败:

tar czvf boot.origin.tgz /boot/
uname -r > kernel_version.before # 保存当前内核版本信息

3. 获取源代码

获取内核源代码并解压:

wget https://gitee.com/openeuler/kernel/repository/archive/openEuler-20.09.zip
unzip openEuler-20.09.zip # kernel-openEuler-20.09
mv kernel-openEuler-20.09 kernel

🔔 注意

您需要在openEuler内核代码仓获取到正确的内核代码URL地址并更新其源代码包的具体文件名称。

解压后的内核源码文件夹名称可能和“kernel-openEuler-20.09”不一样,我们仅以此为例。

4. 编译内核

先进入内核目录查看内核可以编译成为何种类型的文件:

cd kernel
make help | grep Image

这里的输出结果为:

  • Image.gz - Compressed kernel image (arch/arm64/boot/Image.gz)
    Image - Uncompressed kernel image (arch/arm64/boot/Image)

表示内核可编译为Image类型的文件。

配置内核:

make openeuler_defconfig
ls .config # 这时会有.config文件

在这里,我们按源代码文件kernel/arch/arm64/configs/openeuler_defconfig配置了内核(会产生一个默认名称为.config的配置文件)。

echo $(nproc) # 根据前文所述的机器配置,本例这里是16
make -j$(nproc) Image
make -j$(nproc) modules
make -j1 dtbs

5. 安装内核

安装内核模块:

make modules_install

会有类似以下的输出:

......
INSTALL sound/soundcore.ko
DEPMOD 4.19.140

注意:这里输出的版本号是4.19.140,您的运行结果可能于此不同。

安装内核:

make install

最后的输出类似这样:

/bin/sh ./arch/arm64/boot/install.sh 4.19.140
arch/arm64/boot/Image System.map "/boot"

这时我们可以查看/boot目录下新版本的内核文件:

ls /boot | grep 4.19.140

显示如下:

initramfs-4.19.140.img
System.map-4.19.140
vmlinuz-4.19.140

6. 重启系统并以新的内核引导

通常,我们需要借助VNC(Virtual Network Computing)窗口在GRUB菜单显示时用上下光标键选择新编译出来的内核来启动系统。或者,对于本实验而言,也可以使用以下方法:

首先查看新编译出来的内核GRUB菜单:

cat /etc/grub2-efi.cfg

我们应该可以找到类似这样的菜单项:

menuentry 'openEuler (4.19.140) 20.03 (LTS)'

这就是本例中我们新编译出来的内核版本菜单项(在这个菜单项下所用的是4.19.140版本的内核镜像)。

这时我们可以对默认启动项进行设置:

grub2-set-default 'openEuler (4.19.140) 20.03 (LTS)'

确认:

grub2-editenv list

应该类似如下所示的输出:

saved_entry=openEuler (4.19.140) 20.03 (LTS)
boot_success=0

随后重启系统:

reboot

登录并验证:

uname -r # Desire 4.19.140

可以看出内核版本已更新。我们可以通过如下命令查看新内核的一些信息:

ls /lib/modules/`uname -r`

🔔 注意

由于内核代码不断更新的缘故,您编译出来的新内核版本号通常会与此不同。

7. 关机并删除云资源

poweroff

🔔 注意

如果是按需购买的ECS,做完实验后要关机以节约云资源,这时仍会有扣费,除非完全删除云资源——所以如果实验全部做完,就需要完全删除云资源,包括关联到ECS的EIP(弹性公网IP)、数据盘等。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞