![如何从 efi shell 启动 vmlinuz-linux?](https://linux22.com/image/1482716/%E5%A6%82%E4%BD%95%E4%BB%8E%20efi%20shell%20%E5%90%AF%E5%8A%A8%20vmlinuz-linux%EF%BC%9F.png)
如何从 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 的自动扫描功能与*.efi
、vmlinuz*
、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。