kernel7.2.0
openEuler 25.09 升级内核至 kernel 7.2.0(源码编译安装)
环境信息
| 项目 | 值 |
|---|
| 系统 | openEuler 25.09 (x86_64) |
| 原内核 | 7.1.2 |
| 目标内核 | 7.2.0 |
| 硬件 | 6 核 CPU / 30Gi 内存 / 磁盘可用 134G |
| 显卡 | NVIDIA GeForce GTX 750 (GM107) |
编译与安装过程
- 解压源码:
linux-7.2.tar.gz(约 260MB,解压后 1.8G)→ linux-7.2/ - 内核配置:复用当前运行内核配置(
/proc/config.gz)→ .config,再执行 make olddefconfig 适配 7.2 - 并发编译:
make -j3(按需求限制并发为 3,防止系统死机;全量编译约 2.5 小时,产出 15000+ 目标文件) - 安装模块:
make modules_install → /lib/modules/7.2.0 - 安装内核:
make install → /boot/vmlinuz-7.2.0、System.map-7.2.0、initramfs-7.2.0.img(dracut 生成) - 更新引导:grub 自动生成
openEuler (7.2.0) 25.09 菜单项,并通过 grub2-set-default 将默认启动项切换为 7.2.0
安装结果验证
/boot/vmlinuz-7.2.0(13.8MB)、System.map-7.2.0、initramfs-7.2.0.img 均已生成/lib/modules/7.2.0 模块目录完整- grub 默认项:
saved_entry=openEuler (7.2.0) 25.09
NVIDIA 闭源驱动适配(580.159.04)
内核源码不包含 NVIDIA 闭源驱动(仅含开源 amdgpu/i915/nouveau,且 nouveau 被系统 blacklist)。为使 7.2.0 重启后显卡可用,通过 DKMS 为 7.2.0 重新编译安装闭源驱动 nvidia/580.159.04,过程中修复了 3 类内核 7.2 兼容问题:
1. strncpy 被内核 7.2 彻底移除
内核 7.2 的 lib/string.c 已无 strncpy 实现,驱动直接调用会报"隐式声明"错误。将驱动 4 个文件中 7 处 strncpy 替换为 strscpy:
nvidia/os-interface.cnvidia/linux_nvswitch.cnvidia-modeset/nvidia-modeset-linux.cnvidia-uvm/uvm_pmm_gpu.c
2. DRM atomic API 重构(drm_atomic_state → drm_atomic_commit)
内核 7.2 彻底移除了 struct drm_atomic_state 类型,重构为 struct drm_atomic_commit,相关 API 同步改名。对 nvidia-drm 模块做批量适配:
- 类型替换:
struct drm_atomic_state → struct drm_atomic_commit(约 22 处,5 个源文件) - 函数改名:
drm_atomic_state_alloc/put/init/default_clear/default_release → 对应 drm_atomic_commit_*(8 处) - 注意保留驱动自有函数
nv_drm_atomic_state_* 不被误改(用词边界正则)
3. conftest.sh 签名检测过时
驱动构建时通过 conftest.sh 检测内核 atomic_check 回调签名以选择代码分支,但检测代码仍使用旧类型 struct drm_atomic_state,在 7.2 内核下检测失败导致走错分支。将两处检测函数参数改为 struct drm_atomic_commit *state 后恢复正常。
并发限制
/usr/src/nvidia-580.159.04/dkms.conf:-j6 → -j3/etc/dkms/framework.conf:parallel_jobs=3
驱动安装验证
$ dkms status
nvidia/580.159.04, 7.1.2, x86_64: installed
nvidia/580.159.04, 7.2.0, x86_64: installed
- DKMS 退出码 0;5 个模块(nvidia / nvidia-uvm / nvidia-modeset / nvidia-drm / nvidia-peermem)已装入
/lib/modules/7.2.0/kernel/drivers/video/ - initramfs 已重建并包含 nvidia 模块加载配置
重启后验证命令
uname -r
lsmod | grep nvidia
nvidia-smi
回滚方案
grub 菜单保留旧内核项 openEuler (7.1.2) 25.09。若 7.2.0 异常,可在开机菜单选择旧内核启动;或执行 grub2-set-default 'openEuler (7.1.2) 25.09' 恢复默认。
备注
- 源码目录中的
kernel-install.sh 为编译安装流水线脚本(等待编译→安装模块→安装内核),可删除 - 全部编译安装操作并发均 ≤ 3,避免系统负载过高死机
最新评论