百科名片
新型UEFI,全稱“統一的可擴展固件接口”(Unified Extensible Firmware Interface), 是一種詳細描述全新類型接口的標準。這種接口用於作業系統自動從預啟動的操作環境,載入到一種作業系統上,從而使開機程式化繁為簡,節省時間。
簡介
可擴展固件接口(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的國際組織,貢獻者有Intel,Microsoft,AMI,等幾個大廠,屬於open source,目前版本為2.3.1。與legacy BIOS 相比,最大的幾個區別在於:
1. 編碼99%都是由C語言完成;
2. 一改之前的中斷、硬體連線埠操作的方法,而採用了Driver/protocol的新方式;
3. 將不支持X86實模式,而直接採用Flat mode(也就是不能用DOS了,現在有些 EFI 或 UEFI 能用是因為做了兼容,但實際上這部分不屬於UEFI的定義了);
4. 輸出也不再是單純的二進制code,改為Removable Binary Drivers;
5. OS啟動不再是調用Int19,而是直接利用protocol/device Path;
6. 對於第三方的開發,前者基本上做不到,除非參與BIOS的設計,但是還要受到ROM的大小限制,而後者就便利多了。
7.彌補BIOS對新硬體的支持不足的毛病。
UEFI將是近3年的趨勢,到時候對於PC的利用以及維護都將步入一個新的時代。
結構
UEFI使用模組化設計,它在邏輯上可分為硬體控制和OS軟體管理兩部分:作業系統—可擴展固件接口—固件—硬體。
根據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是設備初始化的主要環節,它提供了設備驅動和協定接口環境界面。
UEFI
沒有一項技術可以像BIOS一樣從PC興起以來一直發展到現在卻沒有變,不過主機板製造商微星最近表示,我們熟悉的BIOS可能會在三年內被UEFI取代用戶的需求和存儲技術的進步讓UEFI的實施成為非常容易的工作,因此不需要付出太多的資源就可以實現轉換。
優點
糾錯特性
與BIOS顯著不同的是,UEFI是用模組化、C語言風格的參數堆疊傳遞方式、動態連結的形式構建系統,它比BIOS更易於實現,容錯和糾錯特性也更強,從而縮短了系統研發的時間。更加重要的是,它運行於32位或64位模式,突破了傳統16位代碼的定址能力,達到處理器的最大定址,此舉克服了BIOS代碼運行緩慢的弊端。
兼容性
與BIOS不同的是,UEFI體系的驅動並不是由直接運行在CPU上的代碼組成的,而是用EFI Byte Code(EFI位元組代碼)編寫而成的。Java是以“Byte Code”形式存在的,正是這種沒有一步到位的中間性機制,使Java可以在多種平台上運行。UEFI也借鑑了類似的做法。EFI Byte Code是一組用於UEFI驅動的虛擬機器指令,必須在UEFI驅動運行環境下被解釋運行,由此保證了充分的向下兼容性。
一個帶有UEFI驅動的擴展設備既可以安裝在使用安騰的系統中,也可以安裝在支持UEFI的新PC系統中,它的UEFI驅動不必重新編寫,這樣就無須考慮系統升級後的兼容性問題。基於解釋引擎的執行機制,還大大降低了UEFI驅動編寫的複雜門檻,所有的PC部件提供商都可以參與。
滑鼠操作
UEFI內置圖形驅動功能,可以提供一個高解析度的彩色圖形環境,用戶進入後能用滑鼠點擊調整配置,一切就像操作Windows系統下的套用軟體一樣簡單。
可擴展性
UEFI將使用模組化設計,它在邏輯上分為硬體控制與OS(作業系統)軟體管理兩部分,硬體控制為所有UEFI版本所共有,而OS軟體管理其實是一個可程式的開放接口。藉助這個接口,主機板廠商可以實現各種豐富的功能。比如我們熟悉的各種備份及診斷功能可通過UEFI加以實現,主機板或固件廠商可以將它們作為自身產品的一大賣點。UEFI也提供了強大的聯網功能,其他用戶可以對你的主機進行可靠的遠程故障診斷,而這一切並不需要進入作業系統。
圖形界面
目前UEFI主要由這幾部分構成:UEFI初始化模組、UEFI驅動執行環境、UEFI驅動程式、兼容性支持模組、UEFI高層套用和GUID磁碟分區組成。
UEFI初始化模組和驅動執行環境通常被集成在一個唯讀存儲器中,就好比如今的BIOS固化程式一樣。UEFI初始化程式在系統開機的時候最先得到執行,它負責最初的CPU、北橋、南橋及存儲器的初始化工作,當這部分設備就緒後,緊接著它就載入UEFI驅動執行環境(Driver Execution Environment,簡稱DXE)。當DXE被載入時,系統就可以載入硬體設備的UEFI驅動程式了。DXE使用了枚舉的方式載入各種匯流排及設備驅動,UEFI驅動程式可以放置於系統的任何位置,只要保證它可以按順序被正確枚舉。藉助這一點,我們可以把眾多設備的驅動放置在磁碟的UEFI專用分區中,當系統正確載入這個磁碟後,這些驅動就可以被讀取並套用了。在這個特性的作用下,即使新設備再多,UEFI也可以輕鬆地一一支持,由此克服了傳統BIOS捉襟見肘的情形。UEFI能支持網路設備並輕鬆聯網,原因就在於此。
值得注意的是,一種突破傳統MBR(主引導記錄)磁碟分區結構限制的GUID(全局唯一標誌符)磁碟分區系統將在UEFI規範中被引入。MBR結構磁碟只允許存在4個主分區,而這種新結構卻不受限制,分區類型也改由GUID來表示。在眾多的分區類型中,UEFI系統分區用來存放驅動和應用程式。很多朋友或許對這一點感到擔心:當UEFI系統分區遭到破壞時怎么辦?而容易受病毒侵擾更是UEFI被人詬病的一大致命缺陷。事實上,系統引導所依賴的UEFI驅動通常不會存放在UEFI系統分區中,當該分區的驅動程式遭到破壞,我們可以使用簡單方法加以恢復,根本不用擔心。
X86處理器能夠取得成功,與它良好的兼容性是分不開的。為了讓不具備UEFI引導功能的作業系統提供類似於傳統BIOS的系統服務,UEFI還特意提供了一個兼容性支持模組,這就保證了UEFI在技術上的良好過渡。