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