1. 程式人生 > 實用技巧 >[UEFI] 關於 UEFI 的研究

[UEFI] 關於 UEFI 的研究

本文結合實際實現和 UEFI 標準。

現在的主機板 BIOS 都是 UEFI BIOS,但依然支援 傳統引導(Legacy Boot),原因在 UEFI BIOS 做了 CSM 相容處理,而不能說是內建了 UEFI 和 Legacy 兩個 BIOS。
現在一般稱 UEFI BIOS 為 BIOS,稱不支援 UEFI 的為 Legacy Boot。
如無特指,下稱 UEFI BIOS 為 BIOS,作業系統為 OS

支援多引導啟動

UEFI 支援多系統啟動,一般提供了 UEFI 啟動項快捷鍵(俗稱 U 盤啟動快捷鍵)。

如臺式技嘉主機板 BIOS 為 F12
如筆記本神舟/炫龍主機板 BIOS 為 F7

引導為檔案式

傳統啟動:
傳統引導 是把記錄到 MBR(Master Boot Record) ,但是更改分割槽就會修改 DPT分割槽表 導致引導丟失(格式化分割槽不影響),Windows7 啟動流程:Lecacy BIOS–>MBR–>DPT–>PBR(記錄著OS的引導)–> ->BCD檔案->Winload.exe

而 UEFI 引導採用檔案式,這也是能夠支援多引導的基礎。

EFI 分割槽,是一個帶有特殊 ID 的 FAT 分割槽。
開機時,UEFI BIOS 初始化,然後讀取並執行 EFI 分割槽內的 efi 檔案,之後就一般是作業系統核心的鏈式啟動了(如Windows的啟動過程:BIOS-->ESP分割槽-->啟動管理器bootxxx.efi-->載入BCD檔案-->讀取winload.efi)

各主機板廠家設計稍有差異,並不會完全遵循 UEFI 標準。
例如 技嘉帶圖形介面BIOS的臺式主機板(啟動項快捷鍵 F12):
他們就設計為 掃描到多少個 FAT 分割槽就顯示為多少個啟動項,並以儲存裝置名作為啟動項名。

只需要在 移動USB儲存裝置上的一個 EFI 分割槽上放置一個可引導檔案如 /EFI/Boot/bootx64.efi,即可通過主機板 BIOS 快捷鍵啟動
EFI 分割槽一般為FAT 系檔案系統(FAT12~32,exFAT需要看廠家是否支援,小部分廠家還支援 NTFS 等其他檔案系統作為 EFI 區)

注意:
一般 BIOS 為了安全,在本地已有 OS 引導的情況下,不會把本地硬碟上的 FAT 分割槽識別為啟動項,而是要求本地作業系統把啟動項儲存在主機板裡。(非本地盤如 U 盤一般不受影響)
而面向使用者的 Linux 作業系統一般通過 efiboot 工具來新增 UEFI 啟動項;
附上:常見讀寫 UEFI 啟動項的工具有efiboot(*nix)、EasyUEFI(Windows)
但具體儲存在哪裡好像無從考證,少數外文資料提到本機記錄啟動項是存放在主機板 NVRAM 中,也有資料提到這個 NVRAM 只是一種概念標準,物理實現上並無標準規定。

拓展:

  1. 當然傳統啟動(Legacy Boot)也可以使用 UEFI,現在已有通過軟體實現的 UEFI 啟動器。(基於計算機組成原理中軟體硬體均可實現相同功能的原理).
  2. 另外還有重建/模擬 EFI 記憶體環境實現仿冒硬體的功能。(如 OpenCore 模擬正版的 Mac 硬體產生的 EFI 記憶體環境,並製作核心拓展進行驅動協調,以實現安裝黑蘋果)
  3. UEFI 並無規定一定要使用 GPT(GUID) 分割槽表,很多作業系統如 Windows macOS 的最小化安裝盤依然是 MBR + FAT 分割槽作為 UEFI 啟動,但有些 OS 明確只能使用 GPT,如 Linux

參考:

  1. MBR分割槽表詳解