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