Boot

EFI 引導錯誤:請附加正確的設備“root=”引導選項

  • September 5, 2020

我嘗試在沒有引導載入程序的情況下直接從 EFI/BIOS 啟動系統(Kubuntu 20.04)以加快啟動速度。

我編譯了**Linux-kernel-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)

pcifs和nvme驅動程序建構在核心 (*) 中。據我所知,只需要輸入分區的路徑和根目錄,但是在哪裡呢?


—-EDIT—-

錯誤資訊說,要選擇正確的分區。

我在這裡輸入了正確的分區:

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 實際上是一個PARTUUID(您可以使用命令:blkid找到),所以我嘗試了 PARTUUID,沒有任何改變相同的錯誤。

無論我輸入什麼,Built-in kernel command string我總是得到同樣的錯誤。

FEI boot error photo

一種方法是將引導選項添加到 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 啟動變數以提前涵蓋任何可能的情況,或者在早期啟動過程出現任何問題時從外部媒體重新啟動系統。

但是,如果您正在建構一個不易被使用者篡改的設備或資訊亭式系統,那麼這些限制可能非常適合您。

(在古代版本的 Linux 中,曾經有一種方法可以直接操作 bzImage 文件以通過次要/主要設備號預先設置預設根設備;但我不確定這是否適用於現代核心,並且似乎不記得用於執行操作的命令的名稱。)

引用自:https://unix.stackexchange.com/questions/607617