EFI 引導與 BIOS 引導在原理上有什麼區別?UEFI將要向何處去?

2021-02-14 UEFI社區

作為UEFI/BIOS圈的業內人士,我十分驚訝的看到,UEFI和BIOS的概念在很大程度上還是模糊不清的。甚至一些資深硬體圈網友也讓我來介紹一下。我剛好藉此此題來系統總結UEFI和BIOS的區別,和未來PC啟動固件的走向。

很多網友都有個疑問,UEFI 引導與 BIOS 引導在原理上有什麼區別?我可以負責任的說,UEFI和傳統BIOS在啟動引導過程原理上沒有本質區別!為什麼這麼說呢?那為什麼還要發明UEFI?UEFI將要向何處去?這些問題如同人類宗教起源的靈魂三問「我是誰,從哪裡來,將向哪裡去」一樣,會將看問題的深度提高到另一個層次。幸運的是,這些問題相對靈魂三問來講,有確定的答案,今天我就帶大家一起來探索一下。如果對這些問題不感興趣的同學,讀到這裡也就可以結束了。

有些同學說起UEFI和傳統的BIOS區別,會如數家珍般的羅列MBR、PEI、DXE、UEFI分區啊這些東西,實際上這些全部是軟體層面的抽象,本身並沒有奇特的東西。傳統BIOS也可以做出改變支持PEI/DXE和UEFI分區等等,UEFI固件也可以支持支持傳統BIOS的環境,兩者並沒有功能上本質的區別。

實際上PC的啟動固件的引導流程從IBM PC機誕生第一天起,就沒有本質改變過。如果我們透過SEC、PEI、DXE和BDS等等複雜的術語看幕後隱藏的本質,就會發現無論傳統BIOS還是UEFI,陽光之下沒有什麼新鮮的東西,啟動本身無外乎三個步驟:

1.Rom Stage:在這個階段沒有內存,需要在ROM上運行代碼。這時因為沒有內存,沒有C語音運行需要的棧空間,開始往往是彙編語言,直接在ROM空間上運行。在找到個臨時空間(Cache空間用作RAM,Cache As Ram, CAR)後,C語言終於可以粉墨登場了,後期用C語言初始化內存和為這個目的需要做的一切服務。

2. Ram Stage: 在經過 ROM階段的困難情況後,我們終於有了可以大展拳腳的內存,很多額外需要大內存的東西可以開始運行了。在這時我們開始進行初始化晶片組、CPU、主板模塊等等核心過程。

3. Find something to boot Stage: 終於要進入正題了,需要啟動,我們找到啟動設備。就要枚舉設備,發現啟動設備,並把啟動設備之前需要依賴的節點統統打通。然後開始移交工作,Windows或者Linux的時代開始。

這就是傳統BIOS和UEFI的啟動過程,在剝去了術語後,主幹的三個步驟從來沒有變化過。熟悉嵌入式系統開發的同學會發現,大多數嵌入式系統啟動也大致是這些個步驟,從某種意義上講,PC啟動過程並沒有什麼特殊的。

傳統BIOS儘管開始全部用彙編語言完成,但後期也部分引入了C語言,這些步驟完全是一樣的。什麼MBR分區啊,UEFI分區都是枝節問題,都是技術上可以做到的,沒有什麼是UEFI可以做,傳統BIOS不可以做到的。那麼問題來了,為什麼UEFI會替代傳統BIOS,UEFI展現了什麼獨特的魅力嗎?要理解這一點,我們先要看看PC啟動固件到底問什麼必須。

與大多數人基本的概念不同,在某種意義上來說,X86體系比ARM體系更加開放。X86是很多小夥伴一起玩,以生態圈的概念提供產品,並對自己那部分負責;而ARM體系雖然也依賴生態圈,但最終有個大Boss統合整個生態鏈,提供最後產品並對該產品負總責。

X86生態圈玩家眾多,有OS 廠商(OSV)定期發布作業系統,如Windows,Ubuntu;晶片廠商提供CPU,如Intel, AMD;主板廠商(OEM)提供電腦主板;獨立硬體供應商(IHV)生產擴展板卡如顯卡等等PCIE擴展卡,再如內存廠家推出一代一代不同的內存條等等。

DIY玩家可以自由選擇搭配合適/兼容的產品搭配出自己心儀的機器,休閒上網用戶花2000多元就可以搭配出一套可用的電腦,而遊戲玩家則可能花費上萬元才能滿足遊戲配置需求。還有些品牌機廠商如Dell和聯想等,他們提供整套最終產品給用戶。但他們實際上是在所有小夥伴的零件基礎上拼湊出個產品,技術不強,話語權弱,並不能統一整個產業鏈。用戶津津樂道的反而是用的什麼CPU,安裝的什麼作業系統,用的那種顯卡等等。Windows死機、藍屏和緩慢等等時候,用戶往往會抱怨微軟和Intel,而不是品牌廠商。

ARM體系由最後品牌廠商統合整個產品,它負責打通整個產業鏈,並對其中所有部分負責,話語權極強,同時對技術也相對較強。用戶面對的具體品牌的產品,而不是碎片化的各個部分。強勢的如Apple,硬體軟體一起抓,完全組成閉環的鏈條。稍差也如華為等安卓手機,要負責安卓系統在自己手機移植部分(BSP),客戶出了問題並不會找谷歌,而會去找華為。

在X86生態圈十分強勢的微軟,自己負責作業系統開發,跳過品牌直接服務最終用戶,甚至不經允許直接升級作業系統,鬧出不少風波。強勢也帶來了副作用,它要直接面對數千數萬種千奇百怪的硬體產品,如何才能用一個軟體安裝包服務於這麼多種設備呢?必須要一個軟體抽象層封裝這些硬體差別!

這就引出了BIOS和UEFI的最主要的功能:初始化硬體和提供硬體的軟體抽象。

1.ARM體系也要初始化具體主板相關硬體如GPIO和內存等,這些一般在BSP中完成。與X86體系不同之處在於這些硬體完全定製化,初始化的時候就預先知道有哪些設備,Solder Down了哪個品牌的哪種內存顆粒,到時候就照方抓藥,初始化一大堆寄存器而已。X86系統配置情況在開機時候是不知道的,需要探測(Probe)、Training(內存和PCIe)和枚舉(PCIe等等即插即用設備),相對較複雜。

2.BIOS和UEFI提供了整個主板、包括主板上外插的設備的軟體抽象。通過探測、Training和枚舉,BIOS就有了系統所有硬體的信息。它通過幾組詳細定義好的接口,把這些信息抽象後傳遞給作業系統,這些信息包括SMBIOS(專欄稍後介紹)、ACPI表(ACPI與UEFI),內存映射表(E820或者UEFI運行時)等等。通過這層映射,才能做到做到作業系統完全不改而能夠適配到所有機型和硬體。

在某種程度上來講,BIOS和UEFI是將作業系統BSP部分單獨封裝後下放到主板或者BIOS提供商來完成。這在過去帶來了巨大的好處,WinXP、Win7現在還可以運行在更新的電腦硬體上,新的硬體只要自己更改一下就行了,兼容性是ARM體系所不能比擬的。當然割裂的生態圈也帶來了用戶感受的千差萬別,這也受到廣泛詬病。各自為政也窒息了創新,帶來了同質化。為此,Intel越俎代庖,提出了變形本等等概念;而微軟更直接出了Surface,似乎要與過去的小夥伴爭食。其實這些都是不得已而為之,今後的發展還需要拭目以待。

arm社區最近為了進入x86的傳統優勢領域,也開始接受uefi,不過一般只在伺服器領域。個別廠商為了支持Windows而在平板等設備支持uefi,某廠商在手機上也要引入uefi。不過這些只是支流,並且他們並不把自己叫做BIOS,而叫做Bootloader。

看過我的UEFI歷史的文章:UEFI背後的歷史 就知道UEFI是為了替代傳統BIOS而誕生。

這裡說個小插曲,很多同學都奇怪專欄為什麼有時候說BIOS是指傳統BIOS,有時似乎又涵蓋UEFI。實際上,業內人士在UEFI誕生之初,會嚴格區分兩者的區別,如果十幾年之前有人問我是不是做BIOS的,我會認真的否定:「不,我是做UEFI的,thank you very much!」

如果有人說UEFI BIOS,會被人蔑視:「BIOS就是BIOS,UEFI就是UEFI,怎麼能混為一談呢?」但在現在UEFI已經全面取代傳統BIOS,傳統BIOS已經幾乎絕跡的情況下,業內人士已經放棄吃藥,默認BIOS就是指UEFI。現在如果有人在我說出UEFI來露出痴呆的表情時,我會說:「就是BIOS啦,哈哈哈」

傳統之強大可見一斑。甚至現在的招聘JD還是說要找「BIOS工程師」。

人們總是習慣性的對新出現的東西持懷疑和否定的態度,UEFI在啟動時又還是那三個步驟,那麼UEFI一定是提供了某種特別的東西,才能讓傳統的固件工程師改換門庭。它們究竟是什麼呢?

答案就隱藏在上面一節「BIOS、UEFI的目的」中。UEFI掃除了傳統BIOS割裂的生態,打通了PC固件之間的鴻溝,並提供統一的接口給作業系統,而不關心作業系統是什麼;它能夠更好的完成PC固件的終極目的:初始化硬體和提供硬體的軟體抽象,和啟動作業系統。如果說有什麼東西幫助UEFI打敗了傳統BIOS,那這些東西就是:標準接口、開放統一和開源了。

傳統BIOS來自於IBM,之後就進入戰國時代,激烈的商戰讓接口統一成為了不可能做到的事,只有在面對微軟這個大用戶的時候,才勉強提供了「兼容」的基於軟中斷的接口。它封閉、神秘和充滿各種不清不楚的預設和祖傳代碼,在調試PCI的ROM時要小心各種rom之間互相踩,各種只有老師傅才知道的神奇「訣竅」。要寫個驅動,讓它在各個BIOS廠商那裡都能跑,簡直成為了一件不可能完成的任務。

UEFI[1]由Intel推動,在一開始就將標準公開,拉上了微軟這個PC界的霸主,強勢統一了江湖。在近20年的深耕下,統一了固件啟動階段基礎框架Spec:PI Spec與作業系統的接口Spec:UEFI Spec,並將抽象硬體的原語性Spec: ACPI Spec也拉入這個大家庭,都變成UEFI Forum的一份子。

現在只要符合UEFI driver model的驅動都可以在各個BIOS上運行,打通了各個BIOS廠商之間的柵欄;與此同時,符合UEFI標準的作業系統都可以流暢的在各種主板上運行,無論是Windows,還是Linux各種發行版,甚至是Android。實際上,PC生態圈的繁榮,和UEFI的推廣和被廣泛接受是分不開的。

值得一提的是UEFI內核的大部分代碼是由Intel的中國工程師開發的。在大家一次次電腦的正常運行後面,有他們辛勤工作背影。他們也為固件的開源和國產化做出了自己的貢獻。代碼已經全部開源一部分時間了,在GitHub[2]。

在發展近20年之後,UEFI的代碼量十分龐大。在Github上有數百萬行!簡直和一個作業系統一樣,這些龐大的代碼,各種Lib和driver,讓理解它十分困難。看準了這個機會,以前偏居一隅的Coreboot在躍躍欲試,走出了ChromeOS的疆域,在IoT市場上開始發力,並希望染指伺服器領域。Google又提出LinuxBoot,希望在這個領域能分一杯羹。

簡單就是美,如何簡化它,如何更好地和開源社區一起愉快的玩耍,是UEFI需要解決的問題。20年之後的現在,UEFI已經變得越來越傳統,曾經的屠龍騎士變成了惡龍,業界呼喚新的方案,Intel也不失時機的提出了ModernFW[3]的概念。

在這個變化的時代,挑戰趨勢就意味著被淘汰,就如以前BIOS的霸主Phoenix一樣,作為行業一哥,拒絕變化,終被AMI超越。個人更是要順勢而為,才能事半功倍。未來在哪裡,現在就下斷言為時尚早,但可以預言的是,未來的PC啟動固件,一定會更小,更美,更簡單!

最後給大家留個小思考題:為什麼Intel、AMD這種晶片廠商會這麼關心BIOS標準?它們也不出BIOS啊?

[1]: UEFI 官網 https://uefi.org/

[2]: EDKII https://github.com/tianocore/edk2

[3]: ModernFW https://www.phoronix.com/scan.php?page=news_item&px=ModernFW-Exciting

相關焦點

  • 裝系統時看到的UEFI Bios是什麼?他和傳統啟動模式有什麼區別呢
    要詳細了解uefi之前,我們不得不從bios說起。大家都知道電腦中有一個bios設置,它主要負責開機時檢測硬體功能和引導作業系統啟動的功能。而uefi則是用於作業系統自動從預啟動的操作環境,加載到一種作業系統上從而節省開機時間。uefi啟動是一種新的主板引導項,它被看做是bios的繼任者。
  • 電腦啟動引導方式的Legacy與UEFI有什麼區別,我們應該如何選擇?
    我們在硬碟上安裝系統時,對硬碟進行分區時需要選擇合適的引導方式,現在我們常見的引導方式有UEFI與Legacy兩種,那麼這兩種引導方式有什麼區別呢?各有什麼優缺點呢?我們大家一起來看看。一、引導方式上的區別:Legacy+UEFI啟動模式是基於某些電腦硬體設備和作業系統還不支持基於UEFI BIOS的情況,考慮從傳統BIOS引導模式啟動。傳統BIOS引導模式允許Hba,模塊設備使用Rom選項。UEFI啟動模式用於作業系統自動從預啟動的操作環境,加載到一種作業系統上,從而使開機程序化繁為簡,節省時間。
  • IT之家學院:給U盤配置efi引導分區,打造雙啟系統安裝盤
    在這篇文章中,IT之家將為大家演示如何給U盤配置efi引導分區,從而讓U盤得以正常啟動.▲這2個文件複製到我們創建的efi啟動分區中。▲接著我們打開bootice將我們U盤的主引導記錄和分區引導記錄配置好,激活較大的分區便於legacyBIOS啟動▲接著我們打開BCD編輯選擇其他BCD文件,選中我們新建立的uefi引導分區中的" \efi\microsoft\boot\bcd"這個文件我們選擇高級編輯模式修改裡面啟動的參數▲將這2項路徑改到我們較大的分區上
  • 新手必看:UEFI/BIOS中英對照表圖文詳解
    這幾天小夥伴很多的一個問題就是BIOS設置問題很多,由於BIOS設置界面不同,選項是基本一致的,只是位置會有變化,這期X君就用聯想筆記本BIOS做一個對應詳解。我們開機後一直按鍵盤上的F2或FN+F2進入BIOS,如下圖所示;聯想筆記本bios中英文對照表:1、進入bios後,首先看到的是information(信息)界面,裡面可以看到筆記本的相關信息,包括SN號都可以看到,包括產品名稱(product Name)、BIOS版本(BIOS
  • 教你用Legacy模式和Uefi模式引導修復軟體
    引導方式現在目前有兩種首先我們先來了解UEFI Bios啟動模式UEFI Bios啟動模式可以支持兩種啟動模式,即是Legacy+UEFI啟動模式和UEFI啟動模式,當中Legacy2、我們在安裝電腦系統的時候要是採用Legacy+UEFI模式,則電腦能夠兼容傳統BIOS引導模式才能成功啟動作業系統,需要了解電腦是否支持傳統BIOS引導模式。 3、我們在安裝電腦系統的時候是採用UEFI引導模式,則電腦只支持在UEFI引導模式下才能成功啟動作業系統,需要了解電腦是否支持UEFI引導模式。
  • 電腦系統引導啟動不了!
    當然還有人就會問:我是剛剛新裝的系統,為什麼會出現無法正常引導呢?好的居然我們現在知道是引導無法啟動,那就來看看到底是什麼原因造成引導文件丟失的!第一種方法:這裡我就不廢話多說直接上方法教程,免得大家看著頭暈。將 Windows 7 安裝光碟放入光碟機中,設置為從光碟啟動(不懂的去雲騎士官網查下教程),選擇修復計算機。
  • 如何在Arch Linux(UEFI)上安裝GRUB
    如何在Arch Linux(UEFI)上安裝GRUB 幾周前,我不得不在我的筆記本上從頭開始重新安裝 Arch Linux,同時我發現安裝 Grub 並不像我想的那麼簡單。出於這個原因,由於在新安裝 Arch Linux 時在 UEFI bios 中安裝 Grub 並不容易,所以我要寫這篇教程。
  • 取代傳統BIOS的EFI和UEFI究竟是什麼?
    UEFI採用的是圖形化界面,與傳統BIOS有很大區別需要注意的是,雖然EFI與UEFI的叫法不同,但是兩者在本質上是基本相同的。此外參與UEFI標準開發的並不僅僅有英特爾一家,而是包含了AMD、蘋果、戴爾、惠普、IBM、聯想、微軟等多個龍頭企業,因此UEFI在兼容性上有更好的表現,通用性更強。UEFI相比傳統BIOS的區別和優點在哪裡?
  • UEFI安裝windows7教程,啟動盤速度搞定
    ,一種是legacy,一種是uefi。如果就是要將系統裝在這塊大硬碟上的話,那就得在BIOS裡將啟動模式由legacy改成uefi,作業系統必須是64位的WIN7以上的,才可以成功安裝。但就這樣將U盤插入電腦,BIOS裡將U盤設置成首啟動,是沒有辦法利用U盤啟動安裝程序的,而是會自動進入到UEFI SHELL裡去,因為原版裡面少了樣東西,讓UEFI不認為這個U盤是具備啟動功能的安裝盤。
  • 主板傳統BIOS引導與UEFI引導有何不同?選錯了安裝系統會出錯的
    與此同時,安裝系統的系統盤,比如C盤,也要與之對應,一旦匹配錯誤,就會在安裝系統的時候發生錯誤,比如下圖所示錯誤:正確方式是什麼對於新手來說是不是有點亂!兩種模式的區別知道了主板有兩種啟動方式,那麼它們有什麼區別?為什麼要搞出兩套呢?
  • 2個命令,教你將win10 BIOS啟動方式轉換為UEFI,你見過嗎!
    快捷鍵這種方式最為簡單,而且容易操作,只需要在開機界面中按下提前查詢到的快捷按鍵就能成功啟動U盤;不過有的小夥伴就不太清楚BIOS和UEFI之間到底有什麼區別,等到在網站搜羅了一堆資料以後,原以為能夠理解,結果卻是更加亂,跟丈二和尚摸不著頭腦一樣,到底是什麼玩意兒?
  • 戴爾3583 重裝系統及 BIOS 設置
    2,支持 PE 自動修復 UEFI+GPT 引導。)請採用 uefi+gpt 方式安裝。 2、uefi 引導只支持 win10 64 位作業系統。 3、如果是雙硬碟,注意引導如果是 uefi,那麼我們要將固態硬碟分區改為 guid(gpt 分區),機械硬碟不用分區,如果兩塊硬碟都分區為 guid,注意調整 固態硬碟為第一啟動項。
  • what 和 which 有什麼區別?為什麼 what 不能引導定語從句?
    有同學問「what 和 which 有什麼區別?為什麼what不能引導定語從句?你想要什麼?2. Whatare you doing? 你在做什麼?3. Whichone do you want? 你想要哪一個?4. Whichdo you like best? 你最喜歡哪一個?
  • 360 bios病毒專殺工具BiosFixToo下載|360 bios病毒專殺工具Bios...
    下載中心 360 bios病毒專殺工具BiosFixToo 知道了病毒的原理,我們推出了此款專殺工具,首先將檢測BIOS中是否存在病毒,如果有的話,會使用本工具進行清除,再將BIOS寫回。
  • clover引導win10+deepin15.11+macOS10.15.4
    上兩篇文章我們已經把三個系統裝好了,詳情可見::自定義勾選entries和Linux,隱藏卷填上Preboot和Recovery。我們來看看EFI裡,deepin的引導會出現deepin和ubuntu兩個目錄,我們必須刪除ubuntu目錄,但是單單刪除會導致deepin引導不了,因為EFI/deepin/grubx64.efi默認是加載ubuntu下的grub.cfg,所以我們還得這樣操作:在windows下用winhex打開EFI/deepin/grubx64.efi,搜索ubuntu替換deepin,或者直接用我工具包裡的
  • MBR+Legcay與GPT+UEFI兩種模式區別詳解
    什麼是MBR,什麼是GPTGPT和MBR是兩種不同的分區方案。目前在Windows下廣泛採用的磁碟分區方案仍然是MBR分區結構,但不容懷疑GPT是今後的趨勢。GPT磁碟分區結構可用下圖簡單表示(Windows下基本磁碟)可以看到,在GTP磁碟的第一個數據塊中同樣有一個與MBR(主引導記錄)類似的標記,叫做PMBR。PMBR的作用是,當使用不支持GPT的分區工具時,整個硬碟將顯示為一個受保護的分區,以防止分區表及硬碟數據遭到破壞。UEFI並不從PMBR中獲取GPT磁碟的分區信息,它有自己的分區表,即GPT分區表。