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命令查看系统运行环境:
查看操作系统版本:
本例的输出如下所示:
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"
现在我们来准备编译内核的环境:
注意:如果在安装的过程中出现“Error: GPG check FAILED”错误则可在yum install命令后增加--nogpgcheck选项,例如:
2. 备份
备份boot目录以防后续步骤更新内核失败:
3. 获取源代码
获取内核源代码并解压:
🔔 注意
您需要在openEuler内核代码仓获取到正确的内核代码URL地址并更新其源代码包的具体文件名称。
解压后的内核源码文件夹名称可能和“kernel-openEuler-20.09”不一样,我们仅以此为例。
4. 编译内核
先进入内核目录查看内核可以编译成为何种类型的文件:
这里的输出结果为:
- Image.gz - Compressed kernel image (arch/arm64/boot/Image.gz)
Image - Uncompressed kernel image (arch/arm64/boot/Image)
表示内核可编译为Image类型的文件。
配置内核:
在这里,我们按源代码文件kernel/arch/arm64/configs/openeuler_defconfig配置了内核(会产生一个默认名称为.config的配置文件)。
5. 安装内核
安装内核模块:
会有类似以下的输出:
......
INSTALL sound/soundcore.ko
DEPMOD 4.19.140
注意:这里输出的版本号是4.19.140,您的运行结果可能于此不同。
安装内核:
最后的输出类似这样:
/bin/sh ./arch/arm64/boot/install.sh 4.19.140
arch/arm64/boot/Image System.map "/boot"
这时我们可以查看/boot目录下新版本的内核文件:
显示如下:
initramfs-4.19.140.img
System.map-4.19.140
vmlinuz-4.19.140
6. 重启系统并以新的内核引导
通常,我们需要借助VNC(Virtual Network Computing)窗口在GRUB菜单显示时用上下光标键选择新编译出来的内核来启动系统。或者,对于本实验而言,也可以使用以下方法:
首先查看新编译出来的内核GRUB菜单:
我们应该可以找到类似这样的菜单项:
menuentry 'openEuler (4.19.140) 20.03 (LTS)'
这就是本例中我们新编译出来的内核版本菜单项(在这个菜单项下所用的是4.19.140版本的内核镜像)。
这时我们可以对默认启动项进行设置:
确认:
应该类似如下所示的输出:
saved_entry=openEuler (4.19.140) 20.03 (LTS)
boot_success=0
随后重启系统:
登录并验证:
可以看出内核版本已更新。我们可以通过如下命令查看新内核的一些信息:
🔔 注意
由于内核代码不断更新的缘故,您编译出来的新内核版本号通常会与此不同。
7. 关机并删除云资源
🔔 注意
如果是按需购买的ECS,做完实验后要关机以节约云资源,这时仍会有扣费,除非完全删除云资源——所以如果实验全部做完,就需要完全删除云资源,包括关联到ECS的EIP(弹性公网IP)、数据盘等。
openEuler内核编译
openEuler Kernel Compilation
本案例在鲲鹏平台上编译、安装openEuler操作系统所用内核,从而为后续的内核模块编程(Kernel Module Programming)打下基础。
🏷 术语
鲲鹏云是“华为云鲲鹏云”的简称,本实验的鲲鹏平台是鲲鹏云ECS(也称鲲鹏弹性云服务器,Kunpeng Elastic Cloud Server,KECS)。
🔒🗝 何时使用root身份
为系统安全起见,进行应用编程实验时,我们一般以非root用户登录,但在进行内核编译、安装和内核模块编程实验时,为方便起见(不用频繁输入sudo命令),我们以root身份登录。
1. 准备环境
本例的运行环境是基于鲲鹏处理器的华为云ECS(Elastic Cloud Server,弹性云服务器),所用规格如下:
注意:运行该示例并不需要如此高的配置,这里选择这么高的配置只为加快编译内核代码的速度。
我们可以用
uname命令查看系统运行环境:查看操作系统版本:
本例的输出如下所示:
现在我们来准备编译内核的环境:
注意:如果在安装的过程中出现“Error: GPG check FAILED”错误则可在
yum install命令后增加--nogpgcheck选项,例如:2. 备份
备份boot目录以防后续步骤更新内核失败:
3. 获取源代码
获取内核源代码并解压:
🔔 注意
您需要在openEuler内核代码仓获取到正确的内核代码URL地址并更新其源代码包的具体文件名称。
解压后的内核源码文件夹名称可能和“kernel-openEuler-20.09”不一样,我们仅以此为例。
4. 编译内核
先进入内核目录查看内核可以编译成为何种类型的文件:
这里的输出结果为:
表示内核可编译为Image类型的文件。
配置内核:
在这里,我们按源代码文件
kernel/arch/arm64/configs/openeuler_defconfig配置了内核(会产生一个默认名称为.config的配置文件)。5. 安装内核
安装内核模块:
会有类似以下的输出:
注意:这里输出的版本号是4.19.140,您的运行结果可能于此不同。
安装内核:
最后的输出类似这样:
这时我们可以查看
/boot目录下新版本的内核文件:显示如下:
6. 重启系统并以新的内核引导
通常,我们需要借助VNC(Virtual Network Computing)窗口在GRUB菜单显示时用上下光标键选择新编译出来的内核来启动系统。或者,对于本实验而言,也可以使用以下方法:
首先查看新编译出来的内核GRUB菜单:
我们应该可以找到类似这样的菜单项:
这就是本例中我们新编译出来的内核版本菜单项(在这个菜单项下所用的是4.19.140版本的内核镜像)。
这时我们可以对默认启动项进行设置:
确认:
应该类似如下所示的输出:
随后重启系统:
登录并验证:
可以看出内核版本已更新。我们可以通过如下命令查看新内核的一些信息:
🔔 注意
由于内核代码不断更新的缘故,您编译出来的新内核版本号通常会与此不同。
7. 关机并删除云资源
🔔 注意
如果是按需购买的ECS,做完实验后要关机以节约云资源,这时仍会有扣费,除非完全删除云资源——所以如果实验全部做完,就需要完全删除云资源,包括关联到ECS的EIP(弹性公网IP)、数据盘等。