记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

autoclaw+Deepseek生成的openeuler2509系统中编译kernel 6.19.14内核方法


一,编译内核

  1. 准备编译环境
首先,需要安装编译内核所必需的工具和依赖库。

在终端中执行以下命令:
 
# 1. 安装“Development Tools”组包,包含gcc, make等基础编译工具


sudo dnf groupinstall "Development Tools"


# 2. 安装内核编译的特定依赖
# ncurses-devel: make menuconfig 的图形界面支持
# elfutils-libelf-devel: 处理ELF格式文件
# bc: 编译过程中的计算工具
# openssl-devel: 内核签名等安全功能所需
# bison, flex: 语法解析器生成工具


sudo dnf install ncurses-devel elfutils-libelf-devel bc openssl-devel bison flex


如果编译失败并提示缺少某个头文件或工具,你可以尝试使用sudo dnf builddep kernel来自动安装kernel源码包的所有构建依赖。


  2. 获取内核源码
由于openEuler 25.09源内暂无预编译的 6.19.14 RPM源码包,我们选择从 kernel.org 手动下载官方源码。



# 1. 下载内核源码压缩包
# 你可以在 https://www.kernel.org 上查找你想要的版本


wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.19.14.tar.xz


# 2. 解压源码
tar -xvf linux-6.19.14.tar.xz


# 3. 进入源码目录
cd linux-6.19.14


  3. 配置内核选项
通过复用现有配置并微调,可以确保新内核包含当前系统的驱动和功能,简化定制流程。


复用当前配置:将系统当前运行内核的配置文件复制到源码目录,作为基础配置。


cp /boot/config-$(uname -r) .config


 sed -i 's|CONFIG_SYSTEM_TRUSTED_KEYS=.*|CONFIG_SYSTEM_TRUSTED_KEYS=""|' .config
 sed -i 's|CONFIG_SYSTEM_EXTRA_CERTIFICATE=.*|CONFIG_SYSTEM_EXTRA_CERTIFICATE=""|' .config
 make olddefconfig

以上命令修改内核配置,不然编译会有报错。
更新配置项:由于新版本内核会引入新选项,需要先更新.config文件。运行此命令后,它会逐个提示你处理所有新增的配置项,直接按Enter键选择默认值即可。

定制配置(可选):如果需要进一步裁剪模块或开启特定功能,可使用图形化界面进行配置。

make menuconfig


界面操作提示:
使用 方向键 移动。
按 空格键 切换选择状态(* 表示编译进内核,M 表示编译为模块,[ ] 表示不编译)。
选择 Save 保存配置,然后 Exit 退出。


  4. 编译内核
配置完成后,即可开始编译。-j$(nproc)参数会利用所有CPU核心并行编译,加速过程。

make -j$(nproc)
注意:编译过程耗时较长(半小时至数小时不等),如果在过程中遇到错误,可以尝试去掉-j参数,以便清晰地定位错误信息。


  5. 安装内核与模块
编译成功后,需要将内核镜像、模块等文件安装到系统指定位置。


# 安装内核模块到 /lib/modules/ 目录下
sudo make modules_install


# 安装内核文件(vmlinuz, System.map等)到 /boot 目录,并自动更新GRUB配置
sudo make install

cp .config /boot/config-6.19.14


执行sudo make install后,它会自动复制内核到/boot,生成对应的initramfs,并将新内核条目添加到GRUB的启动菜单中。


  6. 更新引导与重启验证
手动更新GRUB以确保配置生效,并重启系统以加载新内核。


更新GRUB配置:
对于使用UEFI引导的系统,GRUB配置文件路径通常是/boot/efi/EFI/openEuler/grub.cfg。如果不确定,可检查/boot/efi/EFI/下的具体目录名。


# 请将路径替换为你的实际GRUB配置文件路径
sudo grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg


如果你使用的是传统的BIOS引导,命令通常是:


sudo grub2-mkconfig -o /boot/grub2/grub.cfg


重启系统:


sudo reboot
系统重启时,在GRUB启动菜单中选择你刚编译的 6.19.14 内核启动。


登录验证:
成功登录后,执行以下命令,如果终端输出6.19.14,则代表新内核已成功运行。

uname -r



二:编译报错解决方法:

1. 重新运行编译,捕获详细日志

在源码目录(/opt/linux-6.19.14)执行:

bash
# 先清理一下(可选,但建议)
make clean

# 使用单线程编译,并输出详细命令,同时保存到文件
make -j1 V=1 2>&1 | tee build.log
  • -j1:只用1个核心,让错误信息按顺序输出,不被并行日志打乱。

  • V=1:显示完整编译命令,便于定位哪个环节出错。

  • tee build.log:将所有输出同时显示在屏幕并保存到 build.log,方便事后搜索。

等待编译中断后,执行以下命令查看最后的错误:

bash
grep -i "error:" build.log | tail -20

把这段输出贴出来,我就能直接判断了。

我这里把日志直接给autoclaw ,以下是他给出的修复方法:


找到根因了!日志最后几行清楚地显示:

Text
make[3]: *** 没有规则可制作目标"certs/openeuler-cert.pem",由"certs/x509_certificate_list"需求。停止。
make[2]: *** [scripts/Makefile.build:546:certs] 错误 2
make[1]: *** [/opt/linux-6.19.14/Makefile:2065:.] 错误 2
make: *** [Makefile:248:__sub-make] 错误 2

 根因分析

你的 .configCONFIG_SYSTEM_TRUSTED_KEYS 被设为了 certs/openeuler-cert.pem,但 这个文件在主线内核源码中并不存在——它是 openEuler 发行版内核专用的签名证书。

你的 .config 很可能是从 openEuler 发行版 /boot/config-* 复制过来的,所以带上了 openEuler 的证书引用。


解决方法

最简单的方法 — 把证书路径清空:

Bash
# 方法一:直接改 .config,把证书路径设为空
sed -i 's|CONFIG_SYSTEM_TRUSTED_KEYS=.*|CONFIG_SYSTEM_TRUSTED_KEYS=""|' .config

# 也检查一下这个:
sed -i 's|CONFIG_SYSTEM_EXTRA_CERTIFICATE=.*|CONFIG_SYSTEM_EXTRA_CERTIFICATE=""|' .config

# 然后重新生成完整配置并编译
make olddefconfig
make -j6

方法二:如果你是用 menuconfig / nconfig 交互式配置:

Bash
make menuconfig

进去后找到:

Cryptographic API → Certificates for signature checking

把以下两项清空(删掉路径,留空):

  • Additional X.509 keys for default system keyring — 删掉 certs/openeuler-cert.pem
  • X.509 certificate to be preloaded into the system blacklist keyring — 如果有也清空

保存退出后 make -j6 即可继续编译。

(基于之前的经验:openEuler 的发行版 config 带了自家签名证书路径,直接用于主线源码会报 missing target。)





转载请标明出处【autoclaw+Deepseek生成的openeuler2509系统中编译kernel 6.19.14内核方法】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论