[新朋友]點擊上方「海韻互聯」關注我們
[老朋友]點擊屏幕右上角「•••」轉發分享
一、EFI(可擴展固件接口,英文名 Extensible Firmware Interface 或 EFI )
由英特爾,一個主導個人電腦技術研發的公司推出的一種在未來的類PC的電腦系統中替代BIOS的升級方案。BIOS技術的興起源於IBM PC/AT機器的流行以及第一臺由康柏公司研製生產的「克隆」PC。在PC啟動的過程中,BIOS擔負著初始化硬體,檢測硬體功能,以及引導作業系統的責任,在早期,BIOS還提供一套運行時的服務程序給作業系統及應用程式使用。BIOS程序存放於一個掉電後內容不會丟失的只讀存儲器中,系統加電時處理器的第一條指令的地址會被定位到BIOS的存儲器中,便於使初始化程序得到執行。
EFI的產生
眾所周知,英特爾在近二十年來引領以x86系列處理器為基礎的PC技術潮流,它的產品如CPU,晶片組等在PC生產線中佔據絕對領導的位置。因此,不少人認為這一舉動顯示了英特爾公司欲染指固件產品市場的野心。事實上,EFI技術源於英特爾安騰處理器(Itanium)平臺的推出。安騰處理器是英特爾瞄準伺服器高端市場投入近十年研發力量設計產生的與x86系列完全不同的64位新架構。在x86系列處理器進入32位的時代,由於兼容性的原因,新的處理器(i80386)保留了16位的運行方式(實模式),此後多次處理器的升級換代都保留了這種運行方式。甚至在含64位擴展技術的至強系列處理器中,處理器加電啟動時仍然會切換到16位的實模式下運行。英特爾將這種情況歸咎於BIOS技術的發展緩慢。自從PC兼容機廠商通過淨室的方式複製出第一套BIOS源程序,BIOS就以16位彙編代碼,寄存器參數調用方式,靜態連結,以及1MB以下內存固定編址的形式存在了十幾年。雖然由於各大BIOS廠商近年來的努力,有許多新元素添加到產品中,如 PnP BIOS,ACPI,傳統USB設備支持等等,但BIOS的根本性質沒有得到任何改變。這迫使英特爾在開發更新的處理器時,都必須考慮加進使效能大大降低的兼容模式。有人曾打了一個比喻:這就像保時捷新一代的全自動檔跑車被人生套上去一個蹩腳的掛檔器。
然而,安騰處理器並沒有這樣的顧慮,它是一個新生的處理器架構,系統固件和作業系統之間的接口都可以完全重新定義。並且這一次,英特爾將其定義為一個可擴展的,標準化的固件接口規範,不同於傳統BIOS的固定的,缺乏文檔的,完全基於經驗和晦澀約定的一個事實標準。基於EFI的第一套系統產品的出現至今已經有五年的時間,如今,英特爾試圖將成功運用在高端伺服器上的技術推廣到市場佔有率更有優勢的PC產品線中,並承諾在2006年間會投入全力的技術支持。
比較EFI和BIOS
一個顯著的區別就是EFI是用模塊化,C語言風格的參數堆棧傳遞方式,動態連結的形式構建的系統,較BIOS而言更易於實現,容錯和糾錯特性更強,縮短了系統研發的時間。它運行於32位或64位模式,乃至未來增強的處理器模式下,突破傳統16位代碼的尋址能力,達到處理器的最大尋址。它利用加載EFI驅動的形式,識別及操作硬體,不同於BIOS利用掛載實模式中斷的方式增加硬體功能。後者必須將一段類似於驅動的16位代碼,放置在固定的0x000C0000至0x000DFFFF之間存儲區中,運行這段代碼的初始化部分,它將掛載實模式下約定的中斷向量向其他程序提供服務。例如,VGA圖形及文本輸出中斷(INT 10h),磁碟存取中斷服務(INT 13h)等等。由於這段存儲空間有限(128KB),BIOS對於所需放置的驅動代碼大小超過空間大小的情況無能為力。另外,BIOS的硬體服務程序都已16位代碼的形式存在,這就給運行於增強模式的作業系統訪問其服務造成了困難。因此BIOS提供的服務在現實中只能提供給作業系統引導程序或MS-DOS類作業系統使用。而EFI系統下的驅動並不是由可以直接運行在CPU上的代碼組成的,而是用EFI Byte Code編寫而成的。這是一組專用於EFI驅動的虛擬機器指令,必須在EFI驅動運行環境(Driver Execution Environment 或DXE)下被解釋運行。這就保證了充分的向下兼容性,打個比方說,一個帶有EFI驅動的擴展設備,既可以將其安裝在安騰處理器的系統中,也可以安裝於支持EFI的新PC系統中,而它的EFI驅動不需要重新編寫。這樣就無需對系統升級帶來的兼容性因素作任何考慮。另外,由於EFI驅動開發簡單,所有的PC部件提供商都可以參與,情形非常類似於現代作業系統的開發模式,這個開發模式曾使Windows在短短的兩三年時間內成為功能強大,性能優越的作業系統。基於EFI的驅動模型可以使EFI系統接觸到所有的硬體功能,在操作作業系統運行以前瀏覽全球資訊網站不再是天方夜譚,甚至實現起來也非常簡單。這對基於傳統BIOS的系統來說是件不可能的任務,在BIOS中添加幾個簡單的USB設備支持都曾使很多BIOS設計師痛苦萬分,更何況除了添加對無數網絡硬體的支持外,還得憑空構建一個16位模式下的TCP/IP協議棧。
一些人認為BIOS只不過是由於兼容性問題遺留下來的無足輕重的部分,不值得為它花費太大的升級努力。而反對者認為,當BIOS的出現制約了PC技術的發展時,必須有人對它作必要的改變。
EFI和作業系統
EFI在概念上非常類似於一個低階的作業系統,並且具有操控所有硬體資源的能力。不少人感覺它的不斷發展將有可能代替現代的作業系統。事實上,EFI的締造者們在第一版規範出臺時就將EFI的能力限制於不足以威脅作業系統的統治地位。首先,它只是硬體和預啟動軟體間的接口規範;其次,EFI環境下不提供中斷的訪問機制,也就是說每個EFI驅動程序必須用輪詢的方式來檢查硬體狀態,並且需要以解釋的方式運行,較作業系統下的驅動效率更低;再則,EFI系統不提供複雜的存儲器保護功能,它只具備簡單的存儲器管理機制,具體來說就是指運行在x86處理器的段保護模式下,以最大尋址能力為限把存儲器分為一個平坦的段,所有的程序都有權限存取任何一段位置,並不提供真實的保護服務。當EFI所有組件加載完畢時,系統可以開啟一個類似於作業系統Shell的命令解釋環境,在這裡,用戶可以調入執行任何EFI應用程式,這些程序可以是硬體檢測及除錯軟體,引導管理,設置軟體,作業系統引導軟體等等。理論上來說,對於EFI應用程式的功能並沒有任何限制,任何人都可以編寫這類軟體,並且效果較以前MS-DOS下的軟體更華麗,功能更強大。一旦引導軟體將控制權交給作業系統,所有用於引導的服務代碼將全部停止工作,部分運行時代服務程序還可以繼續工作,以便於作業系統一時無法找到特定設備的驅動程序時,該設備還可以繼續被使用。
EFI的組成
一般認為,EFI由以下幾個部分組成:
1、Pre-EFI初始化模塊
2、EFI驅動執行環境
3、EFI驅動程序
4、兼容性支持模塊(CSM)
5、EFI高層應用
6、GUID(GPT)磁碟分區
在實現中,EFI初始化模塊和驅動執行環境通常被集成在一個只讀存儲器中。Pre-EFI初始化程序在系統開機的時候最先得到執行,它負責最初的CPU,主橋及存儲器的初始化工作,緊接著載入EFI驅動執行環境(DXE)。當DXE被載入運行時,系統便具有了枚舉並加載其他EFI驅動的能力。在基於PCI架構的系統中,各PCI橋及PCI適配器的EFI驅動會被相繼加載及初始化;這時,系統進而枚舉並加載各橋接器及適配器後面的各種總線及設備驅動程序,周而復始,直到最後一個設備的驅動程序被成功加載。正因如此,EFI驅動程序可以放置於系統的任何位置,只要能保證它可以按順序被正確枚舉。例如一個具PCI總線接口的ATAPI大容量存儲適配器,其EFI驅動程序一般會放置在這個設備的符合PCI規範的擴展只讀存儲器(PCI Expansion ROM)中,當PCI總線驅動被加載完畢,並開始枚舉其子設備時,這個存儲適配器旋即被正確識別並加載它的驅動程序。部分EFI驅動程序還可以放置在某個磁碟的EFI專用分區中,只要這些驅動不是用於加載這個磁碟的驅動的必要部件。在EFI規範中,一種突破傳統MBR磁碟分區結構限制的GUID磁碟分區系統(GPT)被引入,新結構中,磁碟的分區數不再受限制(在MBR結構下,只能存在4個主分區),並且分區類型將由GUID來表示。在眾多的分區類型中,EFI系統分區可以被EFI系統存取,用於存放部分驅動和應用程式。很多人擔心這將會導致新的安全性因素,因為EFI系統比傳統的BIOS更易於受到計算機病毒的攻擊,當一部分EFI驅動程序被破壞時,系統有可能面臨無法引導的情況。實際上,系統引導所依賴的EFI驅動部分通常都不會存放在EFI的GUID分區中,即使分區中的驅動程序遭到破壞,也可以用簡單的方法得到恢復,這與作業系統下的驅動程序的存儲習慣是一致的。CSM是在x86平臺EFI系統中的一個特殊的模塊,它將為不具備EFI引導能力的作業系統提供類似於傳統BIOS的系統服務。
EFI的發展
英特爾無疑是推廣EFI的積極因素,近年來由於業界對其認識的不斷深入,更多的廠商正投入這方面的研究。包括英特爾,AMD在內的一些PC生產廠家聯合成立了聯合可擴展固件接口論壇,它將在近期推出第一版規範。這個組織將接手規劃EFI發展的重任,並將英特爾的EFI框架解釋為這個規範的一個具體實現。另外,各大BIOS提供商如Phoenix,AMI等,原先被認為是EFI發展的阻礙力量,現在也不斷的推出各自的解決方案。分析人士指出,這是由於BIOS廠商在EFI架構中重新找到了諸如Pre-EFI啟動環境之類的市場位置,然而,隨著EFI在PC系統上的成功運用,以及英特爾新一代晶片組的推出,這一部分市場份額將會不出意料的在英特爾的掌控之中。
二、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是由 EFI 1.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是設備初始化的主要環節,它提供了設備驅動和協議接口環境界面。
三、MBR(Master Boot Record,即硬碟的主引導記錄)
為了便於理解,一般將MBR分為廣義和狹義兩種:廣義的MBR包含整個扇區(引導程序、分區表及分隔標識),也就是上面所說的主引導記錄;而狹義的MBR僅指引導程序而言。
硬碟的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬碟分區表DPT和硬碟有效標誌(55AA)。在總共512位元組的主引導扇區裡主引導程序(boot loader)佔446個字節,第二部分是 Partition table區(分區表),即DPT,佔64個字節,硬碟中分區有多少以及每一分區的大小都記在其中。第三部分是 Magic Number,佔2個字節,固定為55AA。
MBR是不屬於任何一個作業系統,也不能用作業系統提供的磁碟操作命令來讀取它,但可以通過命令來修改和重寫,如在minix3裡面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot來把masterboot這個小程序寫到mbr裡面,masterboot通常用彙編語言來編寫。我們也可以用ROM-BIOS中提供的INT13H的2號功能來讀出該扇區的內容,也可用軟體工具Norton8.0中的DISKEDIT.EXE來讀取。
用INT13H的讀磁碟扇區功能的調用參數如下:
入口參數:AH=2(指定功能號)
AL=要讀取的扇區數
DL=磁碟號(0、1-軟盤;80、81-硬碟)
DH=磁頭號
CL高2位+CH=柱面號
CL低6位=扇區號
CS:BX=存放讀取數據的內存緩衝地址
出口參數:CS:BX=讀取數據存放地址
錯誤信息:如果出錯CF=1 AH=錯誤代碼
用DEBUG讀取位於硬碟0柱面、0磁頭、1扇區的操作如下:
A>DEBUG
-A 100
XXXX:XXXX MOV AX,0201 (用功能號2讀1個扇區)
XXXX:XXXX MOV BX,1000 (把讀出的數據放入緩衝區的地址為CS:1000)
XXXX:XXXX MOV CX,0001 (讀0柱面,1扇區)
XXXX:XXXX MOV DX,0080 (指定第一物理盤的0磁頭)
XXXX:XXXX INT 13
XXXX:XXXX INT 3
XXXX:XXXX (按回車鍵)
-G=100 (執行以上程序段)
-D 1000 11FF (顯示512位元組的MBR內容)
在Windows作業系統下,例如xp,2003,Vista,windows7,有微軟提供的接口直接讀寫mbr;
FILE * fd=fopen("\\\\.\\PHYSICALDRIVE0","rb+");
char buffer[512];
fread(buffer,512,1,fd);
//then you can edit buffer[512] as your wish.
fseek(fd,0,SEEK_SET); //很重要
fwrite(buffer,512,1,fd); //把修改後的MBR寫入到你的機器
fclose(fd); //大功告成
MBR組成
一個扇區的硬碟主引導記錄MBR由4個部分組成。
主引導程序(偏移地址0000H--0088H),它負責從活動分區中裝載,並運行系統引導程序。
出錯信息數據區,偏移地址0089H--00E1H為出錯信息,00E2H--01BDH全為0位元組。
分區表(DPT,Disk Partition Table)含4個分區項,偏移地址01BEH--01FDH,每個分區表項長16個字節,共64位元組為分區項1、分區項2、分區項3、分區項4。
結束標誌字,偏移地址01FE--01FF的2個字節值為結束標誌55AA,如果該標誌錯誤系統就不能啟動。
四、GPT(Globally Unique Identifier Partition Table Format)
一種由基於Itanium計算機中的可擴展固件接口(EFI)使用的磁碟分區架構。與主啟動記錄(MBR)分區方法相比,GPT具有更多的優點,因為它允許每個磁碟有多達128個分區,支持高達18千兆兆字節的卷大小,允許將主磁碟分區表和備份磁碟分區表用於冗餘,還支持唯一的磁碟和分區ID(GUID)。
與支持最大卷為2TB(terabytes)並且每個磁碟最多有4個主分區(或3個主分區,1個擴展分區和無限制的邏輯驅動器)的主啟動記錄(MBR)磁碟分區的樣式相比,GUID分區表(GPT)磁碟分區樣式支持最大卷為18EB(exabytes)並且每磁碟最多有128個分區。與MBR分區的磁碟不同,至關重要的平臺操作數據位於分區,而不是位於非分區或隱藏扇區。另外,GPT分區磁碟有多餘的主要及備份分區表來提高分區數據結構的完整性。
在「磁碟管理」中的磁碟屬性對話框中的「卷」選項卡上,具有GPT分區樣式的磁碟顯示為GUID分區表(GPT)磁碟,而具有MBR分區樣式的磁碟顯示為主啟動記錄(MBR)磁碟。如果發生下列意外事件,可以在GPT磁碟上執行MBR磁碟支持的操作:
在運行帶有 Service Pack 1(SP1)的 Windows Server 2003 的基於x86的計算機和基於x64的計算機上,作業系統必須駐留在MBR磁碟上。其他的硬碟可以是MBR或GPT。
在基於Itanium的計算機上,作業系統加載程序和啟動分區必須駐留在GPT磁碟上。其他的硬碟可以是MBR或GPT。
不能將GPT移至運行 Windows NT 4.0、Windows 2000、Windows XP 或 Windows Server 2003 的基於x86的計算機上。不過,可以將GPT磁碟從運行帶有SP1的 Windows Server 2003 的基於x86的計算機或基於x64的計算機移至運行 Windows Server 2003 或 Windows XP 的基於Itanium的計算機上,反之亦然。
不能使用基於Itanium的Windows版本,將GPT磁碟從基於Itanium的計算機移至運行帶有SP1的 Windows Server 2003 的基於x86的計算機或基於x64的計算機,然後啟動該作業系統。在非基於Itanium的計算機上使用的GPT磁碟必須僅用於數據存儲。
在單個動態磁碟組中既可以有MBR,也可以有GPT磁碟。也使用將基本GPT和MBR磁碟的混合,但它們不是磁碟組的一部分。可以同時使用MBR和GPT磁碟來創建鏡像卷、帶區卷、跨區卷和RAID-5卷,但是MBR的柱面對齊的限制可能會使得創建鏡像卷有困難。通常可以將MBR的磁碟鏡像到GPT磁碟上,從而避免柱面對齊的問題。
可以將MBR磁碟轉換為GPT磁碟,並且只有在磁碟為空的情況下,才可以將GPT磁碟轉換為MBR磁碟。
不支持EFI系統分區的鏡像。必須使用bootcfg命令克隆EFI系統分區。
不能在可移動媒體,或者在與群集服務使用的共享SCSI或 Fibre Channel 總線連接的群集磁碟上使用GPT分區樣式。
可以使用 DiskPart.exe 命令行實用程序或EFI固件實用程序 Diskpart.efi 在基本GPT磁碟上創建分區。有關 DiskPart.exe 的詳細信息,請參閱DiskPart。有關「磁碟管理」管理單元的詳細信息,請參閱磁碟管理概述。有關 Diskpart.efi 的詳細信息,請參閱Intel網站。
在基於Itanium的計算機上的系統恢復方案中,請參閱計算機所附帶的製造商文檔來重新創建或恢復GPT磁碟。
有關管理GPT和MBR磁碟的詳細信息,請參閱可擴展固件接口或 Microsoft Windows 資源工具包網站上的「Disk Management」(磁碟管理)。
微信用戶如何查閱及分享
點擊右上角→發送給朋友
點擊右上角→分享到朋友圈
點擊右上角→複製連結發送到電腦查看
如何訂閱海韻互聯微信
添加朋友→查找公眾號:海韻互聯
添加朋友→搜號碼:NetboyEDU
點擊右上角→查看公共帳號→添加關注
喜歡此文請點讚 ↓