如何从 efi shell 启动 vmlinuz-linux?

如何从 efi shell 启动 vmlinuz-linux?

如何从 efi shell 启动 vmlinuz-linux?我跳入 ESP 并输入vmlinuz-linux(vmlinuz-linux 在 ESP 中),但它说vmlinuz-linux isn't recognized as an internal or external command, operable program, or batch file,为什么我必须先启动引导加载程序,我不明白。

答案1

/vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 initrd=/initramfs-linux.img只需从这里输入https://wiki.archlinux.org/index.php/EFISTUB#Booting_EFISTUB但必须/先删除正斜杠vmlinuz-linux才能使其工作。

答案2

是否需要引导加载程序取决于您的特定 Linux 内核版本是否支持 EFI BOOT STUB。

有关详细信息,请参阅以下内容:https://www.kernel.org/doc/Documentation/efi-stub.txt

答案3

据我所知,如果文件名称不是以 结尾,EFI shell 将不会将其作为程序启动.efi。因此,您必须先重命名内核文件,使其名称以 结尾.efi

如果您无法重命名内核文件,您仍然可以通过另一个引导管理器程序(例如 gummiboot/systemd-boot 或 rEFInd)使用 EFI 存根加载程序启动内核。这些工具不关心文件扩展名——至少不像 shell 那样关心。(rEFInd 的自动扫描功能与*.efivmlinuz*bzImage*和匹配kernel*,但这两个程序的手动引导配置适用于任何文件名。)

此外,正如 fpmurphy1 所说,内核必须使用 EFI 存根支持进行编译。大多数发行版已在其 3.3.0 及更高版本的内核中包含此支持,但这可能不是 100% 通用的,特别是如果您自己编译内核。(据我上次检查,EFI 存根支持不是从 获得的内核源代码的默认内核配置的一部分kernel.org。)

答案4

最好的描述是Documentation/efi-stub.txt这个例子:

fs0:> bzImage.efi console=ttyS0 root=/dev/sda4

它没有详细说明该fs0:>提示,也没有提到 (U)EFI Shell 可以替换“传统”引导加载程序。就我而言,在引导到 Uefi Shell 后,我会收到Shell>提示,并且首先必须选择 ESP/FAT 文件系统。(每个驱动器甚至可以有多个 ESP)

第二点是向 bzImage 添加“.efi”扩展名。我不需要这样做(AMI 2.7)。因此可以简化为:

fsX:> bzImage root=/dev/sda4 [initrd=...] [...]

另一个令人困惑的地方是 DOS 风格的斜杠和脚本中绝对路径的需要.nsh。如果图像位于自己的文件夹“distro”中,则该行如下所示:

distro\bzImage initrd=distro\initrd root=/dev/sdaX

请注意,root 参数有正斜杠;它由内核使用,而不是 Uefi Shell。

相关内容