OS X 的 MacBook Air 基於 Intel 架構,存在 BIOS 概念嗎?
蘋果在做基於英特爾晶元解決方案時候,英特爾會為自己的客戶提夠 BIOS 驅動 SDK,不然 Mac 的硬體沒辦法驅動。
覺得馮東贊同的@郭小閑 的答案更專業。我的答案只是上課與資料的道聽途說,各位權當補充吧。
我反對將 UEFI 叫做 UEFI BIOS 這樣不知所謂的東西。沒有涉硬經驗,不熟悉的領域我就不多言了。
- - -不存在。BIOS 不是唯一的檢查硬體環境、載入硬體的唯一方式。而且 BIOS 只是 IBM 在 PC/AT 下的「歷史遺留」解決方案,一個比較差的解決方案。
BIOS 的「掛載實模式的中斷」方式來載入硬體,驅動代碼大小有限制(128 KB),只能是 16 bit,並且代碼是直接運行在 CPU 上的。因此對硬體商來說,不同 CPU 架構的機器的兼容性很難完成。
UEFI 就是為了解決這些各種問題而提出的解決方案。蘋果從第一台 Intel Mac 上就使用了 UEFI。(In January 2006, Apple Inc. shipped its first Intel-based Macintosh computers. These systems used EFI instead of Open Firmware, which had been used on its previous PowerPC-based systems. [^1])
- - -
話說為什麼 BIOS 那麼久還沒死掉?嘛,UEFI 本來是 Intel 基於 IA-64(Itanium)架構提出的技術,記得貌似最初提出來的時候是閉源的。相比之下,雖然 BIOS 落後,但全套 IBM PC 的資料都是公開的。大多數 PC 製造商都怕用了 UEFI 就不支持 x86、x86-64(AMD64)了,又怕用了 UEFI 只能用 Intel CPU 受人鉗制。況且,用 BIOS 也死不了人嘛。
後來,Intel 可能是真心覺得 BIOS 是時代的殘餘,是阻礙我大微機發展的關鍵。所以拉了好多硬體商成立了一個聯盟,專門制定 UEFI。蘋果就是其中一個。
[^1]: Unified Extensible Firmware Interface至少 2012 的 air 用的是 UEFI 的啟動方式,不是傳統的 BIOS。硬體的配置估計有好幾種方式傳達給系統,比如 ACPI,比如 SMC 晶元等。
BIOS有狹義和廣義兩種理解方式。狹義的,就是IBM PC架構上,運行在16位實模式下,進行開機自檢、給上層實模式操作系統提供底層操作相關介面(各種中斷)、給上層其他操作系統提供大量如ACPI表和SLIC表等底層信息的最底層一層的軟體。intel化後的蘋果機沒有這一層。
廣義上的BIOS其實只取"最底層軟體"這個含義。當我們在說各種遊戲機的BIOS時其實取的都是這個含義,他們中的大多數都不基於intel CPU,更別提實模式了。
EFI作為Intel的產品提出的第一天,它的使命就是作為IBM PC架構上的BIOS的後繼者(至於windows RT給ARM引入的UEFI……我只想呵呵一下)。解決舊式BIOS只能跑在實模式上給開機帶來的減速,去除用不著的大量中斷處理代碼,讓BIOS開發從彙編躍進到C——都是它相對於舊式BIOS帶來的好處。——現在是語文時間——請諸君注目上面一行倒數第二個BIOS的用法,回味一下。這裡你替換成任何其他詞都未免有點辭不達意。想像一下之前的BIOS開發者吧,當他們需要跟人解釋自己的工作時……嗯,現在諸君了解為何有UEFI BIOS的說法了吧?——語文時間結束——
因為絕大多數PC上的操作系統都習慣了BIOS的存在,會向其申請一些服務(即使不是像MS-DOS一樣基本上完全依賴它進行底層操作乃至正常運作),UEFI通常會有一個模塊叫CSM,對上層OS模擬BIOS提供基本服務。這個模塊在現代蘋果機上還是不存在的。因為OSX(及之前的所有Mac OS)之前壓根不在IBM PC上運行,沒有這個歷史負擔。回到LZ的問題上。狹義上,現代蘋果機上不存在BIOS。但存在其後繼者EFI/UEFI(感謝 @imbushuo 評論指出),起的作用也是傳統BIOS的部分作用(自檢、啟動後續的OS、對OS提供DSDT等數據表服務)。BIOS 是在進步的,只是從legacy 跨入了 UEFI 時代, 大家想想 CPU 上電為什麼能動?一開始能跑C嗎(沒有memory)?
推薦閱讀: