接續昨天的 UEFI (統一可延伸韌體介面),UEFI 的前身是 Intel 在 1998 年開發的 EFI,2005 年時交由 UEFI 論壇來推廣與發展,並正式更名為 UEFI。UEFI 為電腦的操作系統和平台韌體之間的介面定義了新的模型,用以取代傳統的 BIOS。UEFI 程式有 99% 用 C 語言撰寫,部分 Assembly、ASL,並需要使用特定開發工具,例如 EDK II 或 TianoCore2。
UEFI開機流程分為下列階段:
- SEC (Security Phase)
這個階段從 Cold Boot 開始執行所有 CPU 初始化程式碼 (Assembly)。它會設定暫存器、堆疊和暫存器,並尋找 PEI Core。
- PEI (Pre-EFI Initialization)
這個階段包含了初始化記憶體 (MRC) 和其他硬體的程式。它會建立 HOB (Hand-Off Block) 資料結構,並將控制權交給 DXE Core。
- DXE (Driver Execution Environment)
這個階段包含了執行 UEFI 驅動程式和應用程式的環境。它會建立 EFI 系統表、協定資料庫和事件佇列,並提供一些服務和介面,例如 Boot Services, Runtime Services, Dispatcher Services 等。
- BDS (Boot Device Selection)
這個階段包含了選擇 Boot Device 和載入 Boot Loader 的程式。這時會讀取開機裝置並顯示開機選單,以讓 User 選擇要啟動的 OS 或其他應用程式如 Shell。
UEFI BIOS 與 Legacy BIOS 相比:
- 支援超過2TB的硬碟
UEFI BIOS 可以使用 GPT 磁碟分區,GPT 支援最高 9.4ZB 的磁碟容量,並且可建立最多 128 個主分割區; 而Legacy BIOS只能使用MBR磁碟分區,MBR 支援最多 2TB 的磁碟容量,MBR 最多建立 4 個主分割區。
- Secure Boot
可以防止開機時載入不受信任的程式,它會檢查數位簽章,且只允許已認證的程式執行。
- 更好的 UI
UEFI BIOS 的介面更加直覺、有更好的互動性,且支援滑鼠操作和多國語言。由於用 C 撰寫,更易於實現複雜的Graphic UI,使各家廠商 BIOS 呈現完全不同的風格。
- Fast Boot
它會跳過一些不必要的 BIOS 步驟,以大幅減少開機時間,直接進入作業系統,但可能會有一些副作用,如部分裝置無法被識別或正常運作。
UEFI 也提供了一些硬體資訊表給作業系統
- ACPI
用來描述硬體設備和電源管理的資訊表,讓作業系統可以控制硬體的開關和省電模式。
- SMBIOS
用來描述主機板、記憶體、處理器等系統資訊的資訊表,讓作業系統可以識別和管理硬體元件。
ACPI 與我要實作的功能有關,明日再續。
參考:
-
https://uefi.org/specifications
-
https://zh.wikipedia.org/zh-tw/統一可延伸韌體介面