EFI(可擴展固件接口)是神馬?
一、EFI (可擴展固件接口,英文名Extensible Firmware Interface 或EFI)
由英特爾——一個(gè)主導個(gè)人電腦技術(shù)研發(fā)的公司推出的一種在未來(lái)的類(lèi)PC的電腦系統中替代BIOS的升級方案。BIOS技術(shù)的興起源于IBM PC/AT機器的流行以及第一臺由康柏公司研制生產(chǎn)的“克隆”PC。在PC啟動(dòng)的過(guò)程中,BIOS擔負著(zhù)初始化硬件,檢測硬件功能,以及引導操作系統的責任,在早期,BIOS還提供一套運行時(shí)的服務(wù)程序給操作系統及應用程序使用。BIOS程序存放于一個(gè)掉電后內容不會(huì )丟失的只讀存儲器中,系統加電時(shí)處理器的第一條指令的地址會(huì )被定位到BIOS的存儲器中,便于使初始化程序得到執行。
EFI的產(chǎn)生
眾所周知,英特爾在近二十年來(lái)引領(lǐng)以x86系列處理器為基礎的PC技術(shù)潮流,它的產(chǎn)品如CPU,芯片組等在PC生產(chǎn)線(xiàn)中占據絕對領(lǐng)導的位置。因此,不少人認為這一舉動(dòng)顯示了英特爾公司欲染指固件產(chǎn)品市場(chǎng)的野心。事實(shí)上,EFI技術(shù)源于英特爾安騰處理器(Itanium)平臺的推出。
安騰處理器是英特爾瞄準服務(wù)器高端市場(chǎng)投入近十年研發(fā)力量設計產(chǎn)生的與x86系列完全不同的64位新架構。在x86系列處理器進(jìn)入32位的時(shí)代,由于兼容性的原因,新的處理器 (i80386)保留了16位的運行方式(實(shí)模式),此后多次處理器的升級換代都保留了這種運行方式。甚至在含64位擴展技術(shù)的至強系列處理器中,處理器加電啟動(dòng)時(shí)仍然會(huì )切換到16位的實(shí)模式下運行。英特爾將這種情況歸咎于BIOS技術(shù)的發(fā)展緩慢。
自從PC兼容機廠(chǎng)商通過(guò)凈室的方式復制出第一套BIOS源程序,BIOS就以16位匯編代碼,寄存器參數調用方式,靜態(tài)鏈接,以及1MB以下內存固定編址的形式存在了十幾年。雖然由于各大BIOS廠(chǎng)商近年來(lái)的努力,有許多新元素添加到產(chǎn)品中,如PnP BIOS,ACPI,傳統USB設備支持等等,但BIOS的根本性質(zhì)沒(méi)有得到任何改變。這迫使英特爾在開(kāi)發(fā)更新的處理器時(shí),都必須考慮加進(jìn)使效能大大降低的兼容模式。有人曾打了一個(gè)比喻:這就像保時(shí)捷新一代的全自動(dòng)檔跑車(chē)被人生套上去一個(gè)蹩腳的掛檔器。
然而,安騰處理器并沒(méi)有這樣的顧慮,它是一個(gè)新生的處理器架構,系統固件和操作系統之間的接口都可以完全重新定義。并且這一次,英特爾將其定義為一個(gè)可擴展的,標準化的固件接口規范,不同于傳統BIOS的固定的,缺乏文檔的,完全基于經(jīng)驗和晦澀約定的一個(gè)事實(shí)標準?;贓FI的第一套系統產(chǎn)品的出現至今已經(jīng)有五年的時(shí)間,如今,英特爾試圖將成功運用在高端服務(wù)器上的技術(shù)推廣到市場(chǎng)占有率更有優(yōu)勢的PC產(chǎn)品線(xiàn)中,并承諾在2006年間會(huì )投入全力的技術(shù)支持。
比較EFI和BIOS
一個(gè)顯著(zhù)的區別就是EFI是用模塊化,C語(yǔ)言風(fēng)格的參數堆棧傳遞方式,動(dòng)態(tài)鏈接的形式構建的系統,較BIOS而言更易于實(shí)現,容錯和糾錯特性更強,縮短了系統研發(fā)的時(shí)間。它運行于32位或64位模式,乃至未來(lái)增強的處理器模式下,突破傳統16位代碼的尋址能力,達到處理器的最大尋址。它利用加載EFI 驅動(dòng)的形式,識別及操作硬件,不同于BIOS利用掛載實(shí)模式中斷的方式增加硬件功能。后者必須將一段類(lèi)似于驅動(dòng)的16位代碼,放置在固定的 0x000C0000至0x000DFFFF之間存儲區中,運行這段代碼的初始化部分,它將掛載實(shí)模式下約定的中斷向量向其他程序提供服務(wù)。例如,VGA 圖形及文本輸出中斷(INT 10h),磁盤(pán)存取中斷服務(wù)(INT 13h)等等。由于這段存儲空間有限(128KB),BIOS對于所需放置的驅動(dòng)代碼大小超過(guò)空間大小的情況無(wú)能為力。
另外,BIOS的硬件服務(wù)程序都以16位代碼的形式存在,這就給運行于增強模式的操作系統訪(fǎng)問(wèn)其服務(wù)造成了困難。因此BIOS提供的服務(wù)在現實(shí)中只能提供給操作系統引導程序或MS-DOS 類(lèi)操作系統使用。
而EFI系統下的驅動(dòng)并不是由可以直接運行在CPU上的代碼組成的,而是用EFI Byte Code編寫(xiě)而成的。這是一組專(zhuān)用于EFI驅動(dòng)的虛擬機器指令,必須在EFI驅動(dòng)運行環(huán)境(Driver Execution Environment,或DXE)下被解釋運行。這就保證了充分的向下兼容性,打個(gè)比方說(shuō),一個(gè)帶有EFI驅動(dòng)的擴展設備,既可以將其安裝在安騰處理器的系統中,也可以安裝于支持EFI的新PC系統中,而它的EFI驅動(dòng)不需要重新編寫(xiě)。這樣就無(wú)需對系統升級帶來(lái)的兼容性因素作任何考慮。
另外,由于EFI 驅動(dòng)開(kāi)發(fā)簡(jiǎn)單,所有的PC部件提供商都可以參與,情形非常類(lèi)似于現代操作系統的開(kāi)發(fā)模式,這個(gè)開(kāi)發(fā)模式曾使Windows在短短的兩三年時(shí)間內成為功能強大,性能優(yōu)越的操作系統?;贓FI的驅動(dòng)模型可以使EFI系統接觸到所有的硬件功能,在操作操作系統運行以前瀏覽萬(wàn)維網(wǎng)站不再是天方夜譚,甚至實(shí)現起來(lái)也非常簡(jiǎn)單。這對基于傳統BIOS的系統來(lái)說(shuō)是件不可能的任務(wù),在BIOS中添加幾個(gè)簡(jiǎn)單的USB設備支持都曾使很多BIOS設計師痛苦萬(wàn)分,更何況除了添加對無(wú)數網(wǎng)絡(luò )硬件的支持外,還得憑空構建一個(gè)16位模式下的TCP/IP協(xié)議棧。
一些人認為BIOS只不過(guò)是由于兼容性問(wèn)題遺留下來(lái)的無(wú)足輕重的部分,不值得為它花費太大的升級努力。而反對者認為,當BIOS的出現制約了PC技術(shù)的發(fā)展時(shí),必須有人對它作必要的改變。
EFI和操作系統
EFI在概念上非常類(lèi)似于一個(gè)低階的操作系統,并且具有操控所有硬件資源的能力。不少人感覺(jué)它的不斷發(fā)展將有可能代替現代的操作系統。事實(shí)上,EFI 的締造者們在第一版規范出臺時(shí)就將EFI的能力限制于不足以威脅操作系統的統治地位。
首先,它只是硬件和預啟動(dòng)軟件間的接口規范;其次,EFI環(huán)境下不提供中斷的訪(fǎng)問(wèn)機制,也就是說(shuō)每個(gè)EFI驅動(dòng)程序必須用輪詢(xún)的方式來(lái)檢查硬件狀態(tài),并且需要以解釋的方式運行,較操作系統下的驅動(dòng)效率更低;再則,EFI系統不提供復雜的存儲器保護功能,它只具備簡(jiǎn)單的存儲器管理機制,具體來(lái)說(shuō)就是指運行在x86處理器的段保護模式下,以最大尋址能力為限把存儲器分為一個(gè)平坦的段,所有的程序都有權限存取任何一段位置,并不提供真實(shí)的保護服務(wù)。
當EFI所有組件加載完畢時(shí),系統可以開(kāi)啟一個(gè)類(lèi)似于操作系統Shell的命令解釋環(huán)境,在這里,用戶(hù)可以調入執行任何EFI應用程序,這些程序可以是硬件檢測及除錯軟件,引導管理,設置軟件,操作系統引導軟件等等。理論上來(lái)說(shuō),對于 EFI應用程序的功能并沒(méi)有任何限制,任何人都可以編寫(xiě)這類(lèi)軟件,并且效果較以前MS-DOS下的軟件更華麗,功能更強大。一旦引導軟件將控制權交給操作系統,所有用于引導的服務(wù)代碼將全部停止工作,部分運行時(shí)代服務(wù)程序還可以繼續工作,以便于操作系統一時(shí)無(wú)法找到特定設備的驅動(dòng)程序時(shí),該設備還可以繼續被使用。
EFI的組成
一般認為,EFI由以下幾個(gè)部分組成:
1. Pre-EFI初始化模塊
2. EFI驅動(dòng)執行環(huán)境
3. EFI驅動(dòng)程序
4. 兼容性支持模塊(CSM)
5. EFI高層應用
6. GUID(GPT) 磁盤(pán)分區
在實(shí)現中,EFI初始化模塊和驅動(dòng)執行環(huán)境通常被集成在一個(gè)只讀存儲器中。Pre-EFI初始化程序在系統開(kāi)機的時(shí)候最先得到執行,它負責最初的 CPU,主橋及存儲器的初始化工作,緊接著(zhù)載入EFI驅動(dòng)執行環(huán)境(DXE)。當DXE被載入運行時(shí),系統便具有了枚舉并加載其他EFI驅動(dòng)的能力。
在基于PCI架構的系統中,各PCI橋及PCI適配器的EFI驅動(dòng)會(huì )被相繼加載及初始化;這時(shí),系統進(jìn)而枚舉并加載各橋接器及適配器后面的各種總線(xiàn)及設備驅動(dòng)程序,周而復始,直到最后一個(gè)設備的驅動(dòng)程序被成功加載。
正因如此,EFI驅動(dòng)程序可以放置于系統的任何位置,只要能保證它可以按順序被正確枚舉。例如一個(gè)具PCI總線(xiàn)接口的ATAPI大容量存儲適配器,其EFI驅動(dòng)程序一般會(huì )放置在這個(gè)設備的符合PCI規范的擴展只讀存儲器(PCI Expansion ROM)中,當PCI總線(xiàn)驅動(dòng)被加載完畢,并開(kāi)始枚舉其子設備時(shí),這個(gè)存儲適配器旋即被正確識別并加載它的驅動(dòng)程序。部分EFI驅動(dòng)程序還可以放置在某個(gè)磁盤(pán)的EFI專(zhuān)用分區中,只要這些驅動(dòng)不是用于加載這個(gè)磁盤(pán)的驅動(dòng)的必要部件。
在EFI規范中,一種突破傳統MBR磁盤(pán)分區結構限制的GUID磁盤(pán)分區系統(GPT)被引入,新結構中,磁盤(pán)的分區數不再受限制(在MBR結構下,只能存在4個(gè)主分區),并且分區類(lèi)型將由GUID來(lái)表示。在眾多的分區類(lèi)型中,EFI系統分區可以被EFI系統存取,用于存放部分驅動(dòng)和應用程序。很多人擔心這將會(huì )導致新的安全性因素,因為EFI系統比傳統的BIOS更易于受到計算機病毒的攻擊,當一部分EFI驅動(dòng)程序被破壞時(shí),系統有可能面臨無(wú)法引導的情況。
實(shí)際上,系統引導所依賴(lài)的EFI驅動(dòng)部分通常都不會(huì )存放在EFI的 GUID分區中,即使分區中的驅動(dòng)程序遭到破壞,也可以用簡(jiǎn)單的方法得到恢復,這與操作系統下的驅動(dòng)程序的存儲習慣是一致的。CSM是在x86平臺EFI 系統中的一個(gè)特殊的模塊,它將為不具備EFI引導能力的操作系統提供類(lèi)似于傳統BIOS的系統服務(wù)。
EFI的發(fā)展
英特爾無(wú)疑是推廣EFI的積極因素,近年來(lái)由于業(yè)界對其認識的不斷深入,更多的廠(chǎng)商正投入這方面的研究。包括英特爾,AMD在內的一些PC生產(chǎn)廠(chǎng)家聯(lián)合成立了聯(lián)合可擴展固件接口論壇,它將在近期推出第一版規范。這個(gè)組織將接手規劃EFI發(fā)展的重任,并將英特爾的EFI框架解釋為這個(gè)規范的一個(gè)具體實(shí)現。另外,各大BIOS提供商如Phoenix, AMI等,原先被認為是EFI發(fā)展的阻礙力量,現在也不斷的推出各自的解決方案。分析人士指出,這是由于BIOS廠(chǎng)商在EFI架構中重新找到了諸如 Pre-EFI啟動(dòng)環(huán)境之類(lèi)的市場(chǎng)位置,然而,隨著(zhù)EFI在PC系統上的成功運用,以及英特爾新一代芯片組的推出,這一部分市場(chǎng)份額將會(huì )不出意料的在英特爾的掌控之中。
評論