鉛錘哥:BIOS、EFI與UEFI詳解

2021-02-07 玩轉電腦

文:IT之家網友 wkdubhe1987 


終於又有功夫寫點東西分享了,今天談一下BIOS、EFI和UEFI,這篇文章涉及比較多計算機原理,不是非常通俗易懂,全文大概5000字,感興趣的同學可以看一下。

BIOS其實是個程序,存儲在BIOS晶片中,而現在的新式電腦用的基本都是UEFI啟動,早期的過渡電腦用的都是EFI啟動。其實EFI或UEFI的一部分也是存儲在一個晶片中,由於它們在表面形式、基本功能上和BIOS差不多,所以習慣上我們也把存儲EFI/UEFI的晶片叫做EFI/UEFI BIOS晶片,EFI/UEFI也叫做EFI/UEFI BIOS,但在實際上它們和BIOS根本是不一樣的,所以最好還是把後面的「BIOS」尾巴去掉為好,下面就來具體談一下BIOS、EFI和UEFI。

BIOS用於計算機硬體自檢、CMOS設置、引導作業系統啟動、提供硬體I/O、硬體中斷等4項主要功能,因此BIOS程序可以分為若干模塊,主要有Boot Block引導模塊、CMOS設置模塊、擴展配置數據(ESCD)模塊、DMI收集硬體數據模塊,其中引導模塊直接負責執行BIOS程序本身入口、計算機基本硬體的檢測和初始化,ESCD用於BIOS與OS交換硬體配置數據,DMI則充當了硬體管理工具和系統層之間接口的角色,通過DMI,用戶可以直觀地獲得硬體的任何信息,CMOS設置模塊就是實現對硬體信息進行設置,並保存在CMOS中,是除了啟動初始化以外BIOS程序最常用的功能。

BIOS本身是彙編語言代碼,是在16位實模式下調用INT 13H中斷執行的,由於x86-64是一個高度兼容的指令集,也為了遷就BIOS的16位實模式的運行環境,所以即使現在的CPU都已是64位,如果還是在BIOS啟動(基本見於09年以前的主板),在開機時仍然都是在16位實模式下執行的。16位實模式直接能訪問的內存只有1MB,就算你安了4G、8G或者16G還是32G內存,到了BIOS上一律只先認前1MB。在這1MB內存中,前640K稱為基本內存,後面384K內存留給開機必要硬體和各類BIOS本身使用,了解了這些,下面談一下BIOS啟動計算機的具體過程。

當按下電源開關時,電源就開始向主板和其他設備供電,這時電壓還不穩定,在早期的南北橋主板上,由主板北橋向CPU發復位信號,對CPU初始化;穩定電壓後復位信號便撤掉。而對於現在的單南橋主板,則由CPU自身調整穩定電壓達到初始化的目的,當電壓穩定後,CPU便在系統BIOS保留的內存地址處執行跳轉BIOS起始處指令,開始執行POST自檢。

在POST自檢中,BIOS只檢查系統的必要核心硬體是否有問題,主要是CPU、640K基本內存、顯卡是否正常,PS/2鍵盤控制器、系統時鐘是否有錯誤等等。由於POST檢查在顯卡初始化以前,因此在這個階段如發生錯誤,是無法在屏幕上顯示的,不過主板上還有個報警揚聲器,而且如果主板的8255外圍可編程接口晶片沒有損壞的話,POST報警聲音一定是會出來的。可以根據報警聲的不同大致判斷錯誤所在,一般情況下,一聲短「嘀」聲基本代表正常啟動,不同的錯誤則是不同的短「嘀」聲和長「嘀」聲組合。POST自檢結束後,BIOS開始調用中斷完成各種硬體初始化工作。

硬體初始化工作中,主要說明兩點,首先經過POST檢測後,電腦終於出現了開機啟動畫面,這就是已經檢測到了顯卡並完成了初始化。但是請注意,由於BIOS是在16位實模式運行,因此該畫面是以VGA解析度(640*480,縱橫比4:3)顯示的,因為實模式最高支持的就是VGA。以前的小14-17寸CRT顯示器由於都是4:3比例,最高解析度也比較低,因此這個開機啟動畫面沒有什麼違和感,但現在的液晶顯示器基本上都是寬屏16:9的,解析度也較高,因此在這樣的顯示屏下,啟動畫面上的一切東西顯示都可以說「慘不忍睹」——圖形被拉長,字體很大很模糊,可以很明顯看到顯示字體的鋸齒。第二,BIOS只識別到由主引導記錄(MBR)初始化的硬碟,之所以說明這點,是因為後續的EFI或UEFI採用了一種新的GUID磁碟分區系統(GPT)格式,這種硬碟在BIOS下是無法識別的。硬體全部初始化完畢後,接下來進入更新ESCD階段。

在ESCD更新階段中,BIOS將對存儲在CMOS中和作業系統交換的硬體配置數據進行檢測,如果系統硬體發生變動,則會更新該數據,否則不更新保持原狀不變,ESCD檢測或更新結束後,BIOS將完成最後一項工作,就是啟動作業系統。

最後這一步中,BIOS根據CMOS中用戶指定的硬體啟動順序,讀取相應設備的啟動或引導記錄,引導相應設備上的作業系統啟動,進入作業系統,此後便由作業系統接替BIOS負責硬體和軟體間的相互通信。如果發現所有硬體都沒有能引導作業系統的記錄,則會在屏幕上顯示相應錯誤信息,並將電腦維持在16位實模式。

雖然BIOS作為電腦加電啟動所必不可少的部分,但是從其於1975年誕生之日起近30餘年,16位彙編語言代碼,1M內存尋址,調用中斷一條條執行的理念和方式竟然一點都沒有改變,雖然經各大主板商不懈努力,BIOS也有了ACPI、USB設備支持,PnP即插即用支持等新東西,但是這在根本上沒有改變BIOS的本質,而英特爾為了遷就這些舊技術,不得不在一代又一代處理器中保留著16位實模式(否則根本無法開機的)。但是,英特爾在2001年開發了全新的安騰處理器,採用IA-64架構,並推出了全新的EFI。後來證明,安騰處理器、IA-64架構沒有推廣開來,而EFI和後繼的UEFI卻發揚光大,成為現在電腦的主要預啟動環境。

EFI,是Extensible Firmware Interface的詞頭縮寫,直譯過來就是可擴展固件接口,它是用模塊化、高級語言(主要是C語言)構建的一個小型化系統,它和BIOS一樣,主要在啟動過程中完成硬體初始化,但它是直接利用加載EFI驅動的方式,識別系統硬體並完成硬體初始化,徹底摒棄讀各種中斷執行。EFI驅動並不是直接面向CPU的代碼,而是由EFI字節碼編寫成,EFI字節碼是專用於EFI的虛擬機器指令,需要在EFI驅動運行環境DXE下解釋運行,這樣EFI既可以實現通配,又提供了良好的兼容。此外,EFI完全是32位或64位,摒棄16位實模式,在EFI中就可以實現處理器的最大尋址,因此可以在任何內存地址存放任何信息。另外,由於EFI的驅動開發非常簡單,基於EFI的驅動模型原則上可以使EFI接觸到所有硬體功能,在EFI上實現文件讀寫,網絡瀏覽都是完全可能的。i,BIOS上的的CMOS設置程序在EFI上是作為一個個EFI程序來執行的,硬體設置是硬體設置程序、而啟動管理則是另一個程序,保存CMOS又是另一個程序,雖然它們在形式的Shell上是在一起的。

EFI在功能上完全等同於一個輕量化的OS,但是EFI在制定時就定位到不足以成為專業OS的地位上,首先,它只是一個硬體和作業系統間的一個接口;其次,EFI不提供中斷訪問機制,EFI必須用輪詢的方式檢查並解釋硬體,較OS下的驅動執行效率較低,最後,EFI只有簡單的存儲器管理機制,在段保護模式下只將存儲器分段,所有程序都可以存取任何一段位置,不提供真實的保護服務。伴隨著EFI,一種全新的GUID磁碟分區系統(GPT)被引入支持,傳統MBR磁碟只能存在4個主分區,只有在創建主分區不足4個時,可以建立一個擴展分區,再在其上建立被系統識別的邏輯分區,邏輯分區也是有數量的,太多的邏輯分區會嚴重影響系統啟動,MBR硬碟分區最大僅支持2T容量,對於現在的大容量硬碟來說也是浪費。GPT支持任意多的分區,每個分區大小原則上是無限制的,但實際上受到OS的規定限制不能做到無限,不過比MBR的2T限制是非常重要的進步。GPT的分區類型由GUID表唯一指定,基本不可能出現重複,其中的EFI系統分區可以被EFI存取,用來存取部分驅動和應用程式,雖然這原則上會使EFI系統分區變得不安全,但是一般這裡放置的都是些「邊緣」數據,即使其被破壞,一般也不會造成嚴重後果,而且也能夠簡單的恢復回來。

當EFI發展到1.1的時候,英特爾決定把EFI公之於眾,於是後續的2.0吸引了眾多公司加入,EFI也不再屬於英特爾,而是屬於了Unified EFI Form的國際組織,EFI在2.0後也遂改稱為UEFI,UEFI,其中的EFI和原來是一個意思,U則是Unified(一元化、統一)的縮寫,所以UEFI的意思就是「統一的可擴展固件接口」,與前身EFI相比,UEFI主要有以下改進:

首先,UEFI具有完整的圖形驅動功能,之前的EFI雖然原則上加入了圖形驅動,但為了保證EFI和BIOS的良好過渡,EFI多數還是一種類DOS界面(仍然是640*480VGA解析度),只支持PS/2鍵盤操作(極少數支持滑鼠操作),不支持USB鍵盤和滑鼠。到了UEFI,則是擁有了完整的圖形驅動,無論是PS/2還是USB鍵盤和滑鼠,UEFI一律是支持的,而且UEFI在顯卡也支持GOP VBIOS的時候,顯示的設置界面是顯卡高解析度按640*480或1024*768顯示,因此畫面雖小但很清楚,但是這樣會導致屏幕周圍大片留黑,不過魚和熊掌不可兼得,除非UEFI默認窗口大小也是最高解析度

其次,UEFI具有一個獨特的功能,安全啟動,而EFI是沒有安全啟動的,安全啟動(Secure Boot),實際上通俗的解釋是叫做固件驗證。開啟UEFI的安全啟動後,主板會根據TPM晶片(或者CPU內置的TPM)記錄的硬體籤名對各硬體判斷,只有符合認證的硬體驅動才會被加載,而Win8以後的Windows則是在作業系統加載的過程中對硬體驅動繼續查籤名,符合Windows記錄的硬體才能被Windows加載,這在一定程度上降低了啟動型程序在作業系統啟動前被預加載造成的風險,但是這也會造成系統安裝變得壟斷

無論EFI還是UEFI,都必須要有預加載環境、驅動執行環境、驅動程序等必要部分組成,為了支持部分舊設備(如在UEFI下掛載傳統MBR硬碟,不支持UEFI啟動的顯卡在UEFI下仍然支持運行等),還需要一個CSM兼容性支持模塊、EFI或UEFI都是僅支持GPT磁碟引導系統的,下面就具體談一下EFI或UEFI啟動計算機的過程。

一般地,預加載環境和驅動執行環境是存儲在UEFI(UEFI BIOS)晶片中的,當打開電源開關時,電腦的主要部件都開始有了供電,與BIOS不同的是,UEFI預加載環境首先開始執行,負責CPU和內存(是全部容量)的初始化工作,這裡如出現重要問題,電腦即使有報警喇叭也不會響,因為UEFI沒有去驅動8255發聲,不過預加載環境只檢查CPU和內存,如果這兩個主要硬體出問題,屏幕沒顯示可以立即確定,另外一些主板會有提供LED提示,可根據CPU或內存亮燈大致判斷故障。

CPU和內存初始化成功後,驅動執行環境(DXE)載入,當DXE載入後,UEFI就具有了枚舉並加載UEFI驅動程序的能力,在此階段,UEFI會枚舉搜索各個硬體的UEFI驅動並相繼加載,完成硬體初始化工作,這相比BIOS的讀中斷加載速度會快的多,同樣如加載顯卡的UEFI驅動成功,電腦也會出現啟動畫面,硬體驅動全部加載完畢後,最後同BIOS一樣,也得去啟動作業系統。

在啟動作業系統的階段,同樣是根據啟動記錄的啟動順序,轉到相應設備(僅限GPT設備,如果啟動傳統MBR設備,則需要打開CSM支持)的引導記錄,引導作業系統並進入,這裡需要注意的是,UEFI在檢測到無任何作業系統啟動設備時,會直接進入UEFI設置頁面,而不是像BIOS那樣黑屏顯示相關信息。

綜上對BIOS和UEFI啟動計算機過程的敘述,可以概括為:BIOS先要對CPU初始化,然後跳轉到BIOS啟動處進行POST自檢,此過程如有嚴重錯誤,則電腦會用不同的報警聲音提醒,接下來採用讀中斷的方式加載各種硬體,完成硬體初始化後進入作業系統啟動過程;而UEFI則是運行預加載環境先直接初始化CPU和內存,CPU和內存若有問題則直接黑屏,其後啟動PXE採用枚舉方式搜索各種硬體並加載驅動,完成硬體初始化,之後同樣進入作業系統啟動過程。

此外,BIOS是16位彙編語言程序,只能運行在16位實模式,可訪問的內存只有1MB,而UEFI是32位或64位高級語言程序(C語言程序),突破實模式限制,可以達到要求的最大尋址。

好了,今天BIOS和EFI、UEFI就說到這裡了,一般用戶大概了解一下就行,不必深入研究。


更多鉛錘哥發過的文章,請翻閱歷史消息查看:

CPU散片、盒裝和原包有什麼區別?

鉛錘哥:CPU矽脂怎麼塗才有用?正確塗矽脂的方法詳解

鉛錘哥:玩遊戲,CPU究竟需要幾核心?

鉛錘哥:史上最全的主板接口詳解 全認清你就是裝機大師!

如何測試電腦穩定性和散熱?

鉛錘哥:100M的寬帶下載速度是多少兆?

相關焦點

  • 淺談U盤啟動的UEFI和普通BIOS版區別與兼容否?
    一、兩者區別uefi是傳統bios的取代比bios更直觀、易操作uefi引導開機比bios
  • 一圖看懂UEFI和BIOS的關係
    UEFI是一種更快捷快速的電腦啟動配置,它的全稱是「統一可擴展固件接口」(Unified Extensible Firmware Interface),接下來就為大家詳細介紹什麼是uefi啟動。第一、要詳細了解uefi之前,我們不得不從bios說起。
  • 華碩主板uefi bios u盤啟動兩種方法
    華碩主板uefi bios u盤啟動裝系統對於新手來說還是有一定的困難,那麼今天我們在這就教大家兩種方法來設置uefi bios u盤啟動的操作
  • Linux引導之EFI SHELL詳解
    3.2 通過bcfg命令添加啟動項節點 的bios 中似乎沒有「手工添加啟動項」 的功能菜單。刀片所用的bios廠商信息記錄如下:——也許其他機型、其他logo 的bios有 「手工添加啟動項」 ,但是本機BIOS中沒有這個功能。在這種情況下,可以嘗試用EFI SHELL裡的bcfg命令來添加啟動項zxpuboot。
  • 從零開始:UEFI模式下安裝win10、Ubuntu雙系統
    話說現在市面上應該很難再找到不支持uefi模式的電腦了吧,uefi模式相比傳統bios系統啟動更快,更安全。
  • BIOS 和UEFI 啟動系統的區別
    UEFI 系統最開始起源於英特爾的安騰架構的EFI ,後來英特爾將EFI 架構開源,與眾多軟硬體廠商聯合開發了UEFI 系統,用來替代傳統的BIOS 系統,負責PC 硬體的初始化和作業系統的引導以及作為作業系統和硬體的中間層,從4系主板開始部分廠商開始支持UEFI 與bios
  • UEFI模式裝多系統 inLinux(index: gpt, fat32, esp, u(efi), update-grub)
    這有個視頻,不需要重裝,傳統 bios+mbr 改 uefi+gpt 雙系統完美啟動https://zhidao.baidu.com/question/1702056578988287780.html進入 PE,需要支持新的PE(好像是win8以後)——支持修復 UEFI 的啟動項……
  • Win10藍屏Winload.efi丟失或損壞怎麼辦?
    Winload.efi 丟失或損壞怎麼辦?不用擔心,你可以按照本文中的步驟進行操作,可以快速的幫你解決這個問題。
  • 鉛錘哥:教你如何正確選購電腦
    綜合這三個條件,鉛錘哥建議你購買品牌機。原因有下:對於簡單的上網需求,4000元的預算非常充裕,可以購買品牌機。而且對於不懂電腦的你,品牌機有成熟的售後服務,出現問題打個客服電話就能得到幫助。例如:聯想、戴爾都是不錯的。預算2000元,主要用途【5】玩LOL英雄聯盟,CF之類要求不高的遊戲,略懂電腦。綜合這三個條件,鉛錘哥建議你自行組裝DIY。
  • DIY製作U盤bios + uefi雙啟動
    格式化完畢後,點擊右下角的主分區(1),點擊瀏覽文件,然後把剛才,在軟碟通裡面提取出來的三個文件efi你確定即可,到此為止,傳統的,bios+uefi  U盤啟動盤已經全部做好了,
  • 鉛錘哥:二手筆記本避坑指南
    經常有不少錘友問鉛錘哥有關二手筆記本的問題,雖然說現在電腦價格一路下滑,但仍需幾千元
  • Hacking Team:攻擊向量之Bios Rootkit
    突破重重困難,最終wd以一名記者身份得以採訪A機構領導,進入了領導的辦公室,談笑間,領導離開一會兒,wd立即警惕起來,盯緊領導的辦公桌的電腦,連忙掏出U盤,開機,進入bios,種下Bios Rootkit後門病毒,熟練連貫的操作。三分鐘的時間,神不知鬼不覺的,A機構網絡系統已經被從內部打開了一個缺口,而且是一個檢測極困難的後門……場景像拍電影,有點誇張。
  • 鉛錘哥:小白購買筆記本指南
    還有一個月大學黨就要開學了,有不少同學在諮詢鉛錘哥購買電腦的事兒,很多都是需要購買筆記本電腦的,鉛錘哥就說說吧。
  • 鉛錘哥:CPU怎麼超頻?會損壞硬體嗎?銳龍CPU簡單超頻方法教程
    今天鉛錘哥今天就給解答一下關於超頻的那些問題。在不花錢的前提下,超頻是能夠在一定程度上提升電腦性能的最佳捷徑,多數用戶,或者說遊戲玩家,超頻的目的無非是為了娛樂,能夠玩得起更好的遊戲,而對於專業人員來說,超頻則是為了測試產品的極限。
  • 鉛錘哥:十五種電腦開機黑屏的原因與解決思路
    最近,很多朋友聯繫鉛錘哥
  • 鉛錘哥:安裝Win7的詳細教程
    鉛錘哥這裡有幾點要說:1、不要在網上隨便下載Windows系統,很可能留有木馬等後門。2、鉛錘哥給大家收集的原版的Windows下載地址,下載下來是一個iso後綴文件,可以通過「UltraISO軟碟通」寫入U盤,通過U盤啟動安裝。
  • 鉛錘哥:筆記本更換固態硬碟SSD的步驟
    鉛錘哥上星期答應了網友出一篇筆記本更換硬碟的教程。
  • uefi啟動是什麼意思 UEFI啟動對比Bios啟動優勢在哪裡
    uefi啟動是什麼意思 UEFI啟動相比Bios優勢何在?UEFI啟動是什麼意思?通俗的說,UEFI是一種新的主板引導初始化的標註設置,相對於BIOS來說的,以前的u盤引導都是針對bios的,沒法在uefi主板上引導uefi的文件到PE裡,也有的pe把這個精簡了。UEFI全稱「統一的可擴展固件接口」(Unified Extensible Firmware Interface), 是一種詳細描述類型接口的標準。
  • 微星b460主板裝win7系統及bios設置教程
    微星b460主板安裝win7注意事項:1、b460大部分品牌主板不支持傳統模式了,只能在uefi模式下安裝win7,注意uefi模式下使用獨立顯卡時一定要開啟csm兼容模式,所以在安裝win7時需要採用本站自帶的鏡像或按教程中勾選解決卡logo方案,要不然在安裝win7時會卡在啟動畫項一直進不了系統。
  • 鉛錘哥:如何檢測電腦電源的故障?
    這是判斷電源是否壞了的一些常見經驗,鉛錘哥在這裡分享給大家。更多鉛錘哥的電源文章:鉛錘哥:電源銘牌怎麼看?教你挑一個不會BOOM的電源鉛錘哥:DIY裝機電源應該怎麼選?鉛錘哥:電源怎麼看質量?6招教你看電源用料有沒縮水