UEFI 引導與 傳統BIOS 引導在原理上有什麼區別?

UEFI 引導與 傳統BIOS 引導在原理上有什麼區別?

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

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

UEFI和BIOS啟動過程有什麼不同嗎?

有些同學說起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啟動固件到底問什麼必須。

為什麼需要BIOS和UEFI?

與大多數人基本的概念不同,在某種意義上來說,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的最主要的功能:初始化硬件提供硬件的軟件抽象

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

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

UEFI 引導與 傳統BIOS 引導在原理上有什麼區別?

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

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

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

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

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

UEFI 引導與 傳統BIOS 引導在原理上有什麼區別?

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

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

芯片公司的角色

有些朋友讀到這裡,應該會有一個疑問:BIOS的標準,不是應該由BIOS供應商(IBV)來主導嗎?為什麼Intel會越俎代庖呢?Intel和AMD在BIOS產業鏈中到底扮演什麼角色?

人們常說,二流的企業做技術,一流的企業做標準。儘管如此,標準的制定、維護和推動需要大量的人力和金錢。標準出來了,推廣它的企業卻破產的示例比比皆是。Intel願意提出標準、實現它並不遺餘力的推動它,是有現實利益考量的。

哪個公司僱用了最多的BIOS開發人員?不是AMI,而是Intel。Intel僱傭了這麼多開發人員,但市面上卻沒有Intel牌子的主板(曾經有,現在服務器也有),是為什麼呢,他們在幹什麼呢?

BIOS對於AMI和各種OEM廠商來說,是主板固件,是產品不可或缺的一個部分。但對Intel和AMD來說,卻更加重要。BIOS和它們的核心商業:賣芯片,息息相關。BIOS和芯片製造,驗證和使用,有千絲萬縷的關係。BIOS是Silicon Enabling的最重要部分。

定義:何謂芯片使能化?英文原詞為silicon enabling,硅使能?如何理解呢?其實不復雜,首先強調一點,公司的存在當然是為了盈利的。又有個比方說,假如你買了一堆積木,先想了下要搭個什麼東西,然後你就通過各種方法把他搭成了你預想的樣子。芯片(Silicon)製造商做的事情其實差不多,首先,他要購入硅,塑料,各種金屬(買積木),通過技術把這些東西有機組合在一起,使其“變廢為寶“(按自己想法搭建),變成了具有各種用途的芯片,並可以證明它好用,可以做成最終賣給客戶的產品或其中一部分。這個過程中所有需要的必要部分,可以看作Enable(使能)了這個產品,使芯片可製造,可驗證,可使用。所有叫做Silicon Enabling。

BIOS在芯片公司裡會深入整個產品週期。在製造之前的Pre-silicon階段,幫助RTL驗證邏輯正確性,避免Tape in後有不可修正的錯誤,減少Tape in次數;在Tape In之後,幫助Power On芯片,驗證各種特性(features)正確工作與否,並在硬件有問題之後,儘可能的通過軟件打補丁(workaround)的方式而不是重新Tape in的方式修正錯誤;最後在產品上市之前,提供參考代碼(reference code)給OEM,幫助它們專注於自己真正的產品,也就是主板和整機上,而不須操心芯片如何正確工作。

可以看出,好的BIOS架構和強大的BIOS團隊,可以確實地幫助芯片公司節省成本:減少Tape In次數。多次Tape In, stepping越多,成本越大。於此同時,更多次Tape in會讓芯片延期上市,上市窗口丟失,可能讓整個產品變得沒有商業價值,這個損失就更不可以衡量了。另一方面,BIOS也可以讓芯片更好地按照設計需求工作,是產業鏈條中的前端。這也就是芯片公司為什麼會這麼在意BIOS,為什麼會在沒有在BIOS上賺到任何錢的情況下,還會無怨無悔的貢獻代碼,領導BIOS前進的原因。

UEFI將要向何處去?

開放的生態,離散的玩家召喚出UEFI代替了傳統BIOS。在發展近20年之後,UEFI的代碼量十分龐大。在Github上有數百萬行!簡直和一個操作系統一樣,提供各種各樣的驅動和lib,包括網絡驅動、iscsi這樣的大塊頭,藍牙和WiFi這些小眾驅動。多樣的驅動和Lib,提供了極大的靈活性,用戶可以拼接出強大的BIOS程序,但與此同時,這些龐大的代碼,各種Lib和driver,讓理解它十分困難。看準了這個機會,以前偏居一隅的Coreboot在躍躍欲試,走出了ChromeOS的疆域,在IoT市場上開始發力,並希望染指服務器領域。Google又提出LinuxBoot,希望在這個領域能分一杯羹。

簡單就是美,如何簡化它,如何更好地和開源社區一起愉快的玩耍,是UEFI需要解決的問題。20年之後的現在,UEFI已經變得越來越傳統,

曾經的屠龍騎士變成了惡龍,業界呼喚新的方案,Intel也不失時機的提出了ModernFW 的概念。

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


分享到:


相關文章: