总结步骤应该是:
-
准备环境:安装依赖,配置源(如果需要的话)
-
下载内核源码(使用yum或手动下载)
-
配置内核(menuconfig)
-
编译(make -j)
-
安装模块和内核
-
更新引导配置
-
重启并验证
一、准备工作
1. 安装依赖工具
sudo dnf groupinstall "Development Tools" # 安装开发工具组
sudo dnf install rpm-build redhat-rpm-config unifdef # RPM 构建工具
sudo dnf install ncurses-devel elfutils-libelf-devel bc # 内核编译依赖
2. 配置 openEuler 源(可选)
如果需要获取最新源码或特定版本,可配置国内镜像加速:
# 以阿里云镜像为例
sudo sed -i 's|http://repo.openeuler.org|https://mirrors.aliyun.com/openeuler|g' /etc/yum.repos.d/openeuler.repo
sudo dnf clean all && sudo dnf makecache
二、下载内核源码
方法1:通过包管理器安装(推荐)
# 安装与当前内核匹配的源码包(自动匹配版本)
sudo dnf install kernel-source.`uname -m` # 根据架构选择(如 aarch64/x86_64)
安装完成后,源码位于:
/usr/src/linux-<版本号>.<架构>/
方法2:手动下载特定版本
# 从 openEuler 官方仓库下载 SRPM 包(以 22.03 LTS-SP1 为例)
wget https://repo.openeuler.org/openEuler-22.03-LTS-SP1/update/aarch64/Packages/kernel-source-5.10.0-136.12.0.rt62.59.oe2203sp1.aarch64.rpm
# 解压 SRPM 获取源码
rpm2cpio kernel-source-*.rpm | cpio -idmv
tar -xvf kernel.tar.gz # 解压后得到内核源码目录
三、配置内核(make menuconfig
)
-
进入源码目录:
cd /usr/src/linux-<版本号>.<架构>/
-
生成配置文件(可选,保留当前配置):
cp /boot/config-$(uname -r) .config
-
修改内核配置:
make menuconfig # 使用文本界面配置工具
-
示例修改项(根据需求调整):
-
修改 PAGESIZE:进入
Kernel Features
→Page size
→ 选择4KB
。 -
启用调试选项:
Kernel hacking
→Compile-time checks and compiler options
→Compile the kernel with debug info
。 -
禁用地址随机化:
Kernel hardening
→Address Space Layout Randomization (ASLR)
→ 取消勾选。
-
-
-
保存配置并退出。
四、编译内核
make -j $(nproc) # 根据 CPU 核心数并行编译(如 -j64)
-
常见问题:
-
若编译失败(如缺少头文件),尝试:
sudo dnf install kernel-devel-$(uname -r) sudo dnf builddep kernel # 自动安装依赖
-
五、安装内核模块和镜像
sudo make modules_install # 安装内核模块
sudo make install # 安装内核镜像和配置到 /boot/
六、更新引导配置(GRUB)
sudo grub2-mkconfig -o /boot/efi/EFI/openeuler/grub.cfg # aarch64/x86_64
# 或
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 部分版本路径不同
设置默认启动项(可选)
# 查看可用内核版本
cat /etc/grub2-efi.cfg | grep openEuler
# 设置默认启动项(如新编译的内核)
sudo grub2-set-default "openEuler (5.10.0) 22.03 (LTS-SP1)"
七、重启系统并验证
sudo reboot
重启后执行:
uname -r # 查看内核版本
getconf PAGESIZE # 验证修改的 PAGESIZE(如 4096)
八、常见问题处理
-
依赖缺失:
sudo dnf install <缺失包名> # 根据错误信息安装
-
编译失败:
-
检查日志中的错误信息,常见问题包括:
-
内存不足:增加交换空间或减少
-j
参数。 -
配置冲突:删除
.config
文件后重新配置。
-
-
-
无法启动新内核:
-
确保
make install
正确生成/boot/vmlinuz-<版本>
和/boot/initramfs-<版本>.img
。 -
检查 GRUB 配置是否包含新内核条目。
-
附录:交叉编译(如 Atlas 200I A2 设备)
如果在 x86 服务器上为 ARM 设备编译内核:
-
安装交叉编译工具链(如
aarch64-linux-gnu-gcc
)。 -
指定架构编译:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j64
总结步骤
- 安装依赖 → 2. 下载源码 → 3. 配置 → 4. 编译 → 5. 安装 → 6. 更新 GRUB → 7. 重启验证。