
如何從 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
IIRC,如果檔案名稱不以.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=...] [...]
.nsh
另一個混淆可能是 DOS 風格的斜線以及腳本中對絕對路徑的需求。將圖像放在自己的資料夾「distro」中,該行如下所示:
distro\bzImage initrd=distro\initrd root=/dev/sdaX
注意root參數有正斜線;它由核心使用,而不是 Uefi Shell。