如何從 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

IIRC,如果檔案名稱不以.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=...] [...]

.nsh另一個混淆可能是 DOS 風格的斜線以及腳本中對絕對路徑的需求。將圖像放在自己的資料夾「distro」中,該行如下所示:

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

注意root參數有正斜線;它由核心使用,而不是 Uefi Shell。

相關內容