UEFI EDK2 專案基礎了解
目錄
UEFI 規範歷史
根據 AI 了解一下最早歷史,1998 年 Intel 在開發全新的 64 位元 Itanium(IA-64)伺服器架構時,發現傳統 16 位元 BIOS 完全無法支援 64 位元架構的開機需求。Intel 工程師因此啟動了 SAL/EFI 專案,目標是用 C 語言打造全新、具備抽象化介面的現代化開機環境。
- 2002 - 2004 年,Intel 發布了 EFI 1.10 規格,並開始在 Itanium 伺服器以及部分 x86 平台上進行試驗。為了推動標準普及,Intel 在 2004 年將部分基礎程式碼以「TianoCore」之名開源,這也是 EDK / EDK2 的前身。
- 2005 年為了避免單一晶片巨頭壟斷標準,包括 Intel、AMD、Microsoft、Apple、HP、Dell、IBM、AMI、Insyde、Phoenix 等業界核心巨頭共同成立了非營利組織 Unified EFI Forum(UEFI Forum)。Intel 正式將 EFI 1.10 規格的擁有權轉交給該論壇,名稱也正式更名為 UEFI(Unified EFI)。
- 2006 - 2012 年 UEFI Forum 推出首個官方統一標準 UEFI 2.0。隨後 Apple 在 2006 年全面轉向 Intel 處理器時率先全面採用 EFI;Windows Vista / 7 開始引入 64 位元 UEFI 支援;到了 2012 年 Windows 8 強制要求 Secure Boot(安全開機),UEFI 正式全面取代傳統 BIOS 成為 PC 業界標準。
- 2013 年到現今,UEFI 接管了 ACPI 規範的維護工作,並將標準擴展到 ARM / AArch64、RISC-V 與 LoongArch 架構。現今伺服器、PC、嵌入式系統與部分車用晶片皆全面運行基於 UEFI / EDK2 架構的韌體。
內部主要小組:
- USWG (UEFI Specification WG) 負責核心 UEFI Specification 的修訂、新硬體協定定義與 API 擴充。
- PIWG (Platform Initialization WG) 負責 PI Specification,定義開機內部各階段(SEC/PEI/DXE/BDS)的架構規範。
- ASWG (ACPI Specification WG) 負責維護進階電源管理與硬體配置的 ACPI 規範(自 ACPI 5.0 後併入)。
- UTWG (UEFI Test WG) 負責開發與維護官方一致性測試套件 SCT(Self-Certification Test)。
- Security WG 專注於平台韌體安全、Secure Boot、憑證管理與抗攻擊標準。
相關文件像是:
- UEFI Specification(目前最新 2.10+ 版,2000 多頁的厚重 PDF)
- UEFI Platform Initialization (PI) Specification(Vol 1 ~ Vol 5)
- ACPI Specification(最新 6.5+ 版)
- UEFI Shell Specification
UEFI 生態圈組成
- 規範制定者(UEFI Forum):只寫「標準規範書」(PDF 文件),規範 API、表格結構與行為準則。
- 開源基礎設施(TianoCore / EDK2):在 BSD 授權下維護開源參考程式碼,由 Intel 與開源社群共同主導。
- 獨立韌體供應商(IBV):如 AMI(Aptio)、Insyde(InsydeH2O)、Phoenix 等,他們基於 EDK2 加上自家的圖形介面、管理功能與模組,授權給 OEM 廠商。
- 硬體與晶片廠(IHV / Silicon Vendor):如 Intel、AMD、Qualcomm,負責撰寫 CPU 與晶片組的驅動程式碼(Silicon Reference Code / MRC)。
- 系統製造商(OEM / ODM):如 ASUS、Dell、HP、廣達、緯創,將 IBV 核心與晶片廠程式碼整合,適配特定主機板電路並燒錄進 SPI Flash 晶片。
OVMF
OVMF 是基於 EDKII 的韌體,可以在 qemu x86-64 虛擬機器下運作。這樣可以輕鬆地使用 UEFI 韌體進行調試和實驗。
Tianocore
UEFI 有七個階段:
- SEC,通電第一步(Reset Vector)。記憶體(DRAM)尚未就緒,CPU 將自身的 Cache 模擬為暫存 RAM(Cache-as-RAM, CAR)建立 C 語言堆疊。
- 驗證下個階段(PEI 核心)的數位簽章,建立信任鏈(Root of Trust)。
- PEI,Pre-EFI Initialization,初始化 CPU 基本暫存器與晶片組。執行 記憶體訓練與初始化(MRC / DRAM Training)。透過 HOB(Hand-Off Block) 記錄記憶體配置資訊,準備交棒給下一階段。
- Driver Execution Environment,這時能用記憶體,啟動 DXE Dispatcher,依序載入數百個驅動程式(PCIe、NVMe、USB、GPU 等)。
- 註冊各種 Protocols,建立 ACPI Table 與 SMBIOS 表格。
- BDS,Boot Device Selection。根據 NVRAM 中的 BootOrder 變數決定開機順序。
- 顯示品牌 Logo、提供按鍵進入 BIOS Setup 選單,或自動載入 OS Bootloader(如 GRUB / Windows Boot Manager)。
- TSL,Transient System Load,執行開機引導程式(.efi)或 UEFI Shell。
- 系統仍可使用 UEFI Boot Services(如分配記憶體、讀寫檔案)。
- Run Time (RT),OS Bootloader 呼叫 ExitBootServices(),釋放開機暫存記憶體。
- 正式交由 OS 核心接管硬體,韌體僅保留少數 Runtime Services(如時間更新、寫入 NVRAM 變數)。
- AL(After Life),處理作業系統關機(S5)、重啟(Reset)或系統休眠/睡眠(S3/S4)的狀態轉換。
第一階段則是使用硬體晶片內建的「硬體信任根(Hardware Root of Trust)」來驗證,晶片出廠前就用微影製程直接「刻死」在 CPU / 晶片組內部的唯讀記憶體(Mask ROM)中,任何軟體或駭客都無法修改。
有些沒有鎖死 Intel Boot Guard 的強制驗證(或者採用寬鬆的認證模式,你就可以謝自己的 BIOS 了,你可以使用 SPI 燒錄器(如 CH341A)強行寫入自己修改過的 BIOS、客製化 Logo、甚至移植的 Coreboot。