BIOS、EFI與UEFI詳解
BIOS、EFI與UEFI詳解
今天談一下BIOS、EFI和UEFI。下面跟著學習啦小編一起來看看它們的詳細區(qū)別吧。
BIOS、EFI與UEFI詳解
前一篇文已經(jīng)說過BIOS是個程序(詳情點此),存儲在BIOS芯片中,而現(xiàn)在的新式電腦用的基本都是UEFI啟動,早期的過渡電腦用的都是EFI啟動。其實EFI或UEFI的一部分也是存儲在一個芯片中,由于它們在表面形式、基本功能上和BIOS差不多,所以習慣上我們也把存儲EFI/UEFI的芯片叫做EFI/UEFI BIOS芯片,EFI/UEFI也叫做EFI/UEFI BIOS,但在實際上它們和BIOS根本是不一樣的,所以最好還是把后面的“BIOS”尾巴去掉為好,下面就來具體談一下BIOS、EFI和UEFI。
前篇文指出BIOS用于計算機硬件自檢、CMOS設(shè)置、引導(dǎo)操作系統(tǒng)啟動、提供硬件I/O、硬件中斷等4項主要功能,因此BIOS程序可以分為若干模塊,主要有Boot Block引導(dǎo)模塊、CMOS設(shè)置模塊、擴展配置數(shù)據(jù)(ESCD)模塊、DMI收集硬件數(shù)據(jù)模塊,其中引導(dǎo)模塊直接負責執(zhí)行BIOS程序本身入口、計算機基本硬件的檢測和初始化,ESCD用于BIOS與OS交換硬件配置數(shù)據(jù),DMI則充當了硬件管理工具和系統(tǒng)層之間接口的角色,通過DMI,用戶可以直觀地獲得硬件的任何信息,CMOS設(shè)置模塊就是實現(xiàn)對硬件信息進行設(shè)置,并保存在CMOS中,是除了啟動初始化以外BIOS程序最常用的功能。
BIOS本身是匯編語言代碼,是在16位實模式下調(diào)用INT 13H中斷執(zhí)行的,由于x86-64是一個高度兼容的指令集,也為了遷就BIOS的16位實模式的運行環(huán)境,所以即使現(xiàn)在的CPU都已是64位,如果還是在BIOS啟動(基本見于09年以前的主板),在開機時仍然都是在16位實模式下執(zhí)行的。16位實模式直接能訪問的內(nèi)存只有1MB,就算你安了4G、8G或者16G還是32G內(nèi)存,到了BIOS上一律只先認前1MB。在這1MB內(nèi)存中,前640K稱為基本內(nèi)存,后面384K內(nèi)存留給開機必要硬件和各類BIOS本身使用,了解了這些,下面談一下BIOS啟動計算機的具體過程。
當按下電源開關(guān)時,電源就開始向主板和其他設(shè)備供電,這時電壓還不穩(wěn)定,在早期的南北橋主板上,由主板北橋向CPU發(fā)復(fù)位信號,對CPU初始化;穩(wěn)定電壓后復(fù)位信號便撤掉。而對于現(xiàn)在的單南橋主板,則由CPU自身調(diào)整穩(wěn)定電壓達到初始化的目的,當電壓穩(wěn)定后,CPU便在系統(tǒng)BIOS保留的內(nèi)存地址處執(zhí)行跳轉(zhuǎn)BIOS起始處指令,開始執(zhí)行POST自檢。
在POST自檢中,BIOS只檢查系統(tǒng)的必要核心硬件是否有問題,主要是CPU、640K基本內(nèi)存、顯卡是否正常,PS/2鍵盤控制器、系統(tǒng)時鐘是否有錯誤等等。由于POST檢查在顯卡初始化以前,因此在這個階段如發(fā)生錯誤,是無法在屏幕上顯示的,不過主板上還有個報警揚聲器,而且如果主板的8255外圍可編程接口芯片沒有損壞的話,POST報警聲音一定是會出來的。可以根據(jù)報警聲的不同大致判斷錯誤所在,一般情況下,一聲短“嘀”聲基本代表正常啟動,不同的錯誤則是不同的短“嘀”聲和長“嘀”聲組合。POST自檢結(jié)束后,BIOS開始調(diào)用中斷完成各種硬件初始化工作。
硬件初始化工作中,主要說明兩點,首先經(jīng)過POST檢測后,電腦終于出現(xiàn)了開機啟動畫面,這就是已經(jīng)檢測到了顯卡并完成了初始化。但是請注意,由于BIOS是在16位實模式運行,因此該畫面是以VGA分辨率(640*480,縱橫比4:3)顯示的,因為實模式最高支持的就是VGA。以前的小14-17寸CRT顯示器由于都是4:3比例,最高分辨率也比較低,因此這個開機啟動畫面沒有什么違和感,但現(xiàn)在的液晶顯示器基本上都是寬屏16:9的,分辨率也較高,因此在這樣的顯示屏下,啟動畫面上的一切東西顯示都可以說“慘不忍睹”——圖形被拉長,字體很大很模糊,可以很明顯看到顯示字體的鋸齒。第二,BIOS只識別到由主引導(dǎo)記錄(MBR)初始化的硬盤,之所以說明這點,是因為后續(xù)的EFI或UEFI采用了一種新的GUID磁盤分區(qū)系統(tǒng)(GPT)格式,這種硬盤在BIOS下是無法識別的。硬件全部初始化完畢后,接下來進入更新ESCD階段。
在ESCD更新階段中,BIOS將對存儲在CMOS中和操作系統(tǒng)交換的硬件配置數(shù)據(jù)進行檢測,如果系統(tǒng)硬件發(fā)生變動,則會更新該數(shù)據(jù),否則不更新保持原狀不變,ESCD檢測或更新結(jié)束后,BIOS將完成最后一項工作,就是啟動操作系統(tǒng)。
最后這一步中,BIOS根據(jù)CMOS中用戶指定的硬件啟動順序,讀取相應(yīng)設(shè)備的啟動或引導(dǎo)記錄,引導(dǎo)相應(yīng)設(shè)備上的操作系統(tǒng)啟動,進入操作系統(tǒng),此后便由操作系統(tǒng)接替BIOS負責硬件和軟件間的相互通信。如果發(fā)現(xiàn)所有硬件都沒有能引導(dǎo)操作系統(tǒng)的記錄,則會在屏幕上顯示相應(yīng)錯誤信息,并將電腦維持在16位實模式。
雖然BIOS作為電腦加電啟動所必不可少的部分,但是從其于1975年誕生之日起近30余年,16位匯編語言代碼,1M內(nèi)存尋址,調(diào)用中斷一條條執(zhí)行的理念和方式竟然一點都沒有改變,雖然經(jīng)各大主板商不懈努力,BIOS也有了ACPI、USB設(shè)備支持,PnP即插即用支持等新東西,但是這在根本上沒有改變BIOS的本質(zhì),而英特爾為了遷就這些舊技術(shù),不得不在一代又一代處理器中保留著16位實模式(否則根本無法開機的)。但是,英特爾在2001年開發(fā)了全新的安騰處理器,采用IA-64架構(gòu),并推出了全新的EFI。后來證明,安騰處理器、IA-64架構(gòu)沒有推廣開來,而EFI和后繼的UEFI卻發(fā)揚光大,成為現(xiàn)在電腦的主要預(yù)啟動環(huán)境。
EFI,是Extensible Firmware Interface的詞頭縮寫,直譯過來就是可擴展固件接口,它是用模塊化、高級語言(主要是C語言)構(gòu)建的一個小型化系統(tǒng),它和BIOS一樣,主要在啟動過程中完成硬件初始化,但它是直接利用加載EFI驅(qū)動的方式,識別系統(tǒng)硬件并完成硬件初始化,徹底摒棄讀各種中斷執(zhí)行。EFI驅(qū)動并不是直接面向CPU的代碼,而是由EFI字節(jié)碼編寫成,EFI字節(jié)碼是專用于EFI的虛擬機器指令,需要在EFI驅(qū)動運行環(huán)境DXE下解釋運行,這樣EFI既可以實現(xiàn)通配,又提供了良好的兼容。此外,EFI完全是32位或64位,摒棄16位實模式,在EFI中就可以實現(xiàn)處理器的最大尋址,因此可以在任何內(nèi)存地址存放任何信息。另外,由于EFI的驅(qū)動開發(fā)非常簡單,基于EFI的驅(qū)動模型原則上可以使EFI接觸到所有硬件功能,在EFI上實現(xiàn)文件讀寫,網(wǎng)絡(luò)瀏覽都是完全可能的。i,BIOS上的的CMOS設(shè)置程序在EFI上是作為一個個EFI程序來執(zhí)行的,硬件設(shè)置是硬件設(shè)置程序、而啟動管理則是另一個程序,保存CMOS又是另一個程序,雖然它們在形式的Shell上是在一起的。
EFI在功能上完全等同于一個輕量化的OS,但是EFI在制定時就定位到不足以成為專業(yè)OS的地位上,首先,它只是一個硬件和操作系統(tǒng)間的一個接口;其次,EFI不提供中斷訪問機制,EFI必須用輪詢的方式檢查并解釋硬件,較OS下的驅(qū)動執(zhí)行效率較低,最后,EFI只有簡單的存儲器管理機制,在段保護模式下只將存儲器分段,所有程序都可以存取任何一段位置,不提供真實的保護服務(wù)。伴隨著EFI,一種全新的GUID磁盤分區(qū)系統(tǒng)(GPT)被引入支持,傳統(tǒng)MBR磁盤只能存在4個主分區(qū),只有在創(chuàng)建主分區(qū)不足4個時,可以建立一個擴展分區(qū),再在其上建立被系統(tǒng)識別的邏輯分區(qū),邏輯分區(qū)也是有數(shù)量的,太多的邏輯分區(qū)會嚴重影響系統(tǒng)啟動,MBR硬盤分區(qū)最大僅支持2T容量,對于現(xiàn)在的大容量硬盤來說也是浪費。GPT支持任意多的分區(qū),每個分區(qū)大小原則上是無限制的,但實際上受到OS的規(guī)定限制不能做到無限,不過比MBR的2T限制是非常重要的進步。GPT的分區(qū)類型由GUID表唯一指定,基本不可能出現(xiàn)重復(fù),其中的EFI系統(tǒng)分區(qū)可以被EFI存取,用來存取部分驅(qū)動和應(yīng)用程序,雖然這原則上會使EFI系統(tǒng)分區(qū)變得不安全,但是一般這里放置的都是些“邊緣”數(shù)據(jù),即使其被破壞,一般也不會造成嚴重后果,而且也能夠簡單的恢復(fù)回來。
當EFI發(fā)展到1.1的時候,英特爾決定把EFI公之于眾,于是后續(xù)的2.0吸引了眾多公司加入,EFI也不再屬于英特爾,而是屬于了Unified EFI Form的國際組織,EFI在2.0后也遂改稱為UEFI,UEFI,其中的EFI和原來是一個意思,U則是Unified(一元化、統(tǒng)一)的縮寫,所以UEFI的意思就是“統(tǒng)一的可擴展固件接口”,與前身EFI相比,UEFI主要有以下改進:
首先,UEFI具有完整的圖形驅(qū)動功能,之前的EFI雖然原則上加入了圖形驅(qū)動,但為了保證EFI和BIOS的良好過渡,EFI多數(shù)還是一種類DOS界面(仍然是640*480VGA分辨率),只支持PS/2鍵盤操作(極少數(shù)支持鼠標操作),不支持USB鍵盤和鼠標。到了UEFI,則是擁有了完整的圖形驅(qū)動,無論是PS/2還是USB鍵盤和鼠標,UEFI一律是支持的,而且UEFI在顯卡也支持GOP VBIOS的時候,顯示的設(shè)置界面是顯卡高分辨率按640*480或1024*768顯示,因此畫面雖小但很清楚,但是這樣會導(dǎo)致屏幕周圍大片留黑,不過魚和熊掌不可兼得,除非UEFI默認窗口大小也是最高分辨率
其次,UEFI具有一個獨特的功能,安全啟動,而EFI是沒有安全啟動的,安全啟動(Secure Boot),實際上通俗的解釋是叫做固件驗證。開啟UEFI的安全啟動后,主板會根據(jù)TPM芯片(或者CPU內(nèi)置的TPM)記錄的硬件簽名對各硬件判斷,只有符合認證的硬件驅(qū)動才會被加載,而Win8以后的Windows則是在操作系統(tǒng)加載的過程中對硬件驅(qū)動繼續(xù)查簽名,符合Windows記錄的硬件才能被Windows加載,這在一定程度上降低了啟動型程序在操作系統(tǒng)啟動前被預(yù)加載造成的風險,但是這也會造成系統(tǒng)安裝變得壟斷
無論EFI還是UEFI,都必須要有預(yù)加載環(huán)境、驅(qū)動執(zhí)行環(huán)境、驅(qū)動程序等必要部分組成,為了支持部分舊設(shè)備(如在UEFI下掛載傳統(tǒng)MBR硬盤,不支持UEFI啟動的顯卡在UEFI下仍然支持運行等),還需要一個CSM兼容性支持模塊、EFI或UEFI都是僅支持GPT磁盤引導(dǎo)系統(tǒng)的,下面就具體談一下EFI或UEFI啟動計算機的過程。
一般地,預(yù)加載環(huán)境和驅(qū)動執(zhí)行環(huán)境是存儲在UEFI(UEFI BIOS)芯片中的,當打開電源開關(guān)時,電腦的主要部件都開始有了供電,與BIOS不同的是,UEFI預(yù)加載環(huán)境首先開始執(zhí)行,負責CPU和內(nèi)存(是全部容量)的初始化工作,這里如出現(xiàn)重要問題,電腦即使有報警喇叭也不會響,因為UEFI沒有去驅(qū)動8255發(fā)聲,不過預(yù)加載環(huán)境只檢查CPU和內(nèi)存,如果這兩個主要硬件出問題,屏幕沒顯示可以立即確定,另外一些主板會有提供LED提示,可根據(jù)CPU或內(nèi)存亮燈大致判斷故障。
CPU和內(nèi)存初始化成功后,驅(qū)動執(zhí)行環(huán)境(DXE)載入,當DXE載入后,UEFI就具有了枚舉并加載UEFI驅(qū)動程序的能力,在此階段,UEFI會枚舉搜索各個硬件的UEFI驅(qū)動并相繼加載,完成硬件初始化工作,這相比BIOS的讀中斷加載速度會快的多,同樣如加載顯卡的UEFI驅(qū)動成功,電腦也會出現(xiàn)啟動畫面,硬件驅(qū)動全部加載完畢后,最后同BIOS一樣,也得去啟動操作系統(tǒng)。
在啟動操作系統(tǒng)的階段,同樣是根據(jù)啟動記錄的啟動順序,轉(zhuǎn)到相應(yīng)設(shè)備(僅限GPT設(shè)備,如果啟動傳統(tǒng)MBR設(shè)備,則需要打開CSM支持)的引導(dǎo)記錄,引導(dǎo)操作系統(tǒng)并進入,這里需要注意的是,UEFI在檢測到無任何操作系統(tǒng)啟動設(shè)備時,會直接進入UEFI設(shè)置頁面,而不是像BIOS那樣黑屏顯示相關(guān)信息。
綜上對BIOS和UEFI啟動計算機過程的敘述,可以概括為:BIOS先要對CPU初始化,然后跳轉(zhuǎn)到BIOS啟動處進行POST自檢,此過程如有嚴重錯誤,則電腦會用不同的報警聲音提醒,接下來采用讀中斷的方式加載各種硬件,完成硬件初始化后進入操作系統(tǒng)啟動過程;而UEFI則是運行預(yù)加載環(huán)境先直接初始化CPU和內(nèi)存,CPU和內(nèi)存若有問題則直接黑屏,其后啟動PXE采用枚舉方式搜索各種硬件并加載驅(qū)動,完成硬件初始化,之后同樣進入操作系統(tǒng)啟動過程。
此外,BIOS是16位匯編語言程序,只能運行在16位實模式,可訪問的內(nèi)存只有1MB,而UEFI是32位或64位高級語言程序(C語言程序),突破實模式限制,可以達到要求的最大尋址。