-grant-nvme
我已经构建了一个自定义内核,并在编译期间给出了 CONFIG_LOCALVERSION 。然而,当我尝试启动它时,无论我做什么,grub 似乎都会寻找/lib/modules/6.6.16
,但我无法弄清楚它从哪里提取 6.6.16。应该是在找6.6.16-grant-nvme
。我已经检查了十几次 CONFIG_LOCALVERSION 在编译期间是否设置正确,GRUB 的引导条目是否设置正确,/lib/modules 和 /boot/vmlinuz-6.6.16-grant-nvme 中都存在正确的名称GRUB 持续引导至文件夹 6.6.16 vanilla 的原因。
它是从哪里拉出来的?如何将其定向到正确的文件夹?
完整错误是:
[ 6.174579] systemd[1]: Failed to start Load Kernel Modules.
[FAILED] Failed to start Load Kernel Modules.
[ 6.494351] dracut-pre-udev[499]: modprobe: FATAL: Module dm_mod not found in directory /lib/modules/6.6.16
果然,当我进入 dracut 时,我看到:
dracut:/# ls /lib/modules
6.6.16-grant-nvme
更新
我也尝试过dracut --force --kver 6.6.16-grant-nvme /boot/initramfs-6.6.16-grant-nvme.img
更新2
今天以新的眼光回到这个问题并继续进行下去vmlinuz
。这对我来说很奇怪;内核构建字符串是6.6.16 ([email protected]) (gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), GNU ld version 2.35.2-42.el9) #2 SMP PREEMPT_DYNAMIC Thu Feb 15 08:10:42 EST 2024
这显然没有我的CONFIG_LOCALVERSION
。我将再次回顾内核构建过程,看看是否有什么问题。问题是,/boot 中的文件夹名称是正确的,我只能想象它正在读取时会发生这种情况CONFIG_LOCALVERSION
答案1
我最终返回,保存我的配置,做了make clean
, make mrproper
, make distclean
.
之后我恢复了我的配置并再次构建并且它起作用了。我不知道到底出了什么问题,因为名称/boot
都是正确的,但似乎实际的内核构建本身以某种方式在没有配置本地版本的情况下获取了一些东西。
在我重置一切之后,一切都正常了。