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