關於UEFI


UEFI中圖形化的硬件設置界面Extensible Firmware Interface(EFI,可擴展固件接口)是 Intel 为全新類型的 PC 固件的體系結構、接口和服務提出的建議標准。其主要目的是为了提供一組在 OS 加載之前(启動前)在所有平台上一致的、正確指定的启動服務,被看做是有近20多年曆史的PC BIOS的繼任者。



由於電腦教育普及,很多人都知道BIOS就是Basic Input/Output System,翻成中文是“基本輸入/輸出系統”,是一種所謂的“固件”,負責在開機時做硬件启動和檢測等工作,並且擔任操作系統控制硬件時的中介角色。

然而,那些都是過去DOS 時代的事情,自從Windows NT出現,Linux 開始嶄露頭角後,這些操作系統已將過去需要通過BIOS完成的硬件控制程序放在操作系統中完成,不再需要調用BIOS功能。一般來說,當今所謂的“電腦高手”,多半是利用BIOS來對硬件性能做些超頻調校,除了專業人士外,鮮有人再利用 BIOS 進行底層工作。

因为硬件發展迅速,傳統式(Legacy)BIOS 成为進步的包袱,現在已發展出最新的EFI(Extensible Firmware Interface)可擴展固件接口,以現在傳統 BIOS 的觀點來說,未來將是一個“沒有特定 BIOS”的電腦時代。

UEFI是由EFI1.10为基礎發展起來的,它的所有者已不再是Intel,而是一個稱作Unified EFI Form(www.uefi.org)的國際組織,貢獻者有Intel,Microsoft,AMI,等幾個大廠,屬於open source,目前版本为2.1。與legacy BIOS 相比,最大的幾個區別在於:

1. 編碼99%都是由C語言完成;

2. 一改之前的中斷、硬件端口操作的方法,而采用了Driver/protocal的新方式;

3. 將不支持X86模式,而直接采用Flat mode(也就是不能用DOS了,現在有些 EFI 或 UEFI 能用是因为做了兼容,但實際上這部分不屬於UEFI的定義了);

4. 輸出也不再是單純的二進制code,改为Removable Binary Drivers;

5. OS启動不再是調用Int19,而是直接利用protocol/device Path;

6. 對於第三方的開發,前者基本上做不到,除非参與BIOS的設計,但是還要受到ROM的大小限制,而後者就便利多了。

UEFI將是近3年的趨勢,到時候對於PC的利用以及維護都將步入一個新的時代。

[編輯本段]UEFI結構

uEFI概念根據UEFI概念圖的結構,我們將把uEFI概念劃为兩部分:uEFI的實體 (uEFI Image)跟平台初始化框架。

uEFI的實體-uEFI Image(圖中藍框圍起部分)

根據uEFI規範定義,uEFI Image包含三種:uEFI Applications, OS Loaders and uEFI Drivers。

uEFI Applications是硬件初始化完,操作系統启動之前的核心應用,比如:启動管理、BIOS設置、uEFI Shell、診斷程式、調度和供應程式、調試應用...等等

OS Loaders是特殊的uEFI Application,主要功能是启動操作系統並退出和關閉uEFI應用。

uEFI Drivers是提供設備間接口協議,每個設備獨立運行提供設備版本號和相應的参數以及設備間關聯,不再需要基於操作系統的支持。

启動隊列

平台初始化框架

uEFI框架主要包含兩部分,一是PEI(EFI預初始化),另一部分是驅動執行環境 (DXE)。

PEI主要是用來檢測启動模式、加載主存儲器初始化模塊、檢測和加載驅動執行環境核心。

DXE是設備初始化的主要環節,它提供了設備驅動和協議接口環境界面。