EFI 启动错误:请附加正确的设备“root=”启动选项

EFI 启动错误:请附加正确的设备“root=”启动选项

我尝试直接从 EFI/BIOS 启动系统(Kubuntu 20.04),以实现更快的启动速度,而无需启动加载程序。
我编译了Linux-内核-5.8.5,将文件复制并重命名/usr/src/linux-5.8.5/arch/x86/boot/bzImage/boot/efi/EFI/ubuntu.efi.重启进入BIOS,选择ubuntu.efi并添加到安全启动
系统启动但出现以下错误:

Please append a correct device "root=" boot option; here are the available partitions:
(driver?)
103:00001 123456 nvme0n1p1 ...UUID....
103:00002 123456 nvme0n1p2 ...UUID....
103:00003 123456 nvme0n1p3 ...UUID....

kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)

PCI,FSNVME驱动程序构建在内核中 (*)。据我所知,只需输入分区路径和根目录,但是在哪里?


----编辑----

错误消息显示,选择正确的分区。
我在这里输入了正确的分区:

make menuconfig

Processor type and features  --->
    [*] Built-in kernel command line
        (root=/dev/nvme0n1p5) Built-in kernel command string
            [*] Built-in command line overrides boot loader arguments

我犯了同样的错误。
然后我尝试用 替换路径root=/dev/nvme0n1p5UUID得到相同的错误。
我仔细查看了UUID,发现列出的UUID实际上是一个帕图UID(可以通过命令查看:黑子),所以我尝试了 PARTUUID,没有任何改变,同样的错误。
无论我在其中输入什么,Built-in kernel command string我总是会遇到相同的错误。

FEI开机错误图片

答案1

一种方法是使用以下命令-@的选项将引导选项添加到 NVRAM 中的 UEFI 引导变量efibootmgr

echo "root=/dev/nvme0n1pX" | efibootmgr -c -d /dev/nvme0n1 -L "Kubuntu with kernel UEFI stub" -l \\EFI\\ubuntu.efi -@ -

... 其中/dev/nvme0n1pX是包含实际根文件系统的 NVME 设备分区,/dev/nvme0n1是包含 ESP 分区的 NVME 设备,\\EFI\\ubuntu.efi是相对于 ESP 分区根的 Windows 样式路径名,带有双反斜杠,因为反斜杠是特殊字符对于外壳。您可以设置-L您想要的任何标签文本(选项参数)。

请注意,这根本不包括 initramfs,除非您已将其嵌入到内核文件中。可以通过添加内核启动参数来让 UEFI 存根加载 initramfs,initrd=\\EFI\\initrd.img但支持不确定,因为这的记录非常少,并且依赖于 UEFI 固件支持,而 UEFI 固件支持可能存在错误和特定于供应商的怪癖(某些系统可能需要全部大写的绝对路径,其他路径是大小写准确的相对路径,等等)。

它还不允许通过编辑内核启动选项来启动到紧急/单用户模式,因为您没有允许在启动时编辑它们的启动加载程序。因此,您需要预测任何可能的启动选项要求,并生成多个 UEFI 启动变量以提前涵盖任何可能的情况,或者在早期启动过程出现任何问题时从外部介质重新启动系统。

但是,如果您正在构建用户不易篡改的设备或信息亭式系统,那么这些限制可能很适合您。

(在古代版本的 Linux 中,曾经有一种方法可以直接操作 bzImage 文件,通过次要/主要设备编号预先设置默认根设备;但我不确定这是否适用于现代内核,并且似乎不记得用于执行操作的命令的名称。)

答案2

我解决了。
正确的命令是:fs0:> Kubuntu.efi root=/dev/nvme0n1p5
解决方案位于:Linux-kernel ---> ~/Documentation/admin-guide/efi-stub.rst

非常感谢您的帮助。

相关内容