在前面的文章,我們了解傳統BIOS和新一代UEFI開機流程的差別,看完LKK的傳統BIOS歷經20年不變所帶來的限制與包袱,接下來就要進入實戰的階段了,一起來認識升級UEFI的好處,以及目前有哪些硬體和作業系統可以支援這個新一代韌體。
UEFI的版本發展
最初制定的EFI版本2000年12月的1.02版。在2002年的12月又釋出了加入EFI驅動程式模型的1.10版。於2005年,Intel將此規格提供給負責UEFI開發和推廣的UEFI論壇。為了反映這點,EFI也被更名為UEFI。在大部分的文件資料中,EFI和UEFI講的是一樣的東西。
UEFI論壇在2007年1月釋出2.1版的規範。目前最新公開的版本就是2009年5月發佈的2.3版。概括而論,凡依照UEFI論壇規範,使用C語言寫作的BIOS即為UEFI BIOS。
UEFI論壇成員類別 | |
IBV(獨立BIOS 廠商) | AMI、Insyde、Phoenix |
IHV(獨立硬體廠商) | AMD、Apple、Dell、HP、 IBM、Intel、聯想 |
ISV(獨立軟體廠商) | 微軟 |
UEFI BIOS哪裡好?
UEFI是藉由UEFI論壇制定的嚴謹規範來達成標準化,並用模組化之C語言方式的參數堆疊傳遞,藉由動態連結形式所建構出來的系統,相較於使用組合語言的傳統BIOS更易於實作,在容錯和錯誤更正的表現上更加優良,更好開發。UEFI是以32或64位元CPU保護模式執行(也稱為Flat Mode),突破傳統16位元代碼的定址能力,可達到CPU的最大定址空間。
1. 定址空間更彈性
UEFI BIOS利用載入EFI driver的形式,來進行硬體的辨識/控制及系統資源掌控。
傳統BIOS是以真實模式中斷向量的方式增加硬體功能。它要將一段類似於驅動程式的16位元代碼,放置在記憶體0x000C0000至0x000DFFFF之間。這段記憶體空間有限(128KB),因此,當必須放置的option ROM超過128KB時,傳統BIOS便無能為力。
很多時候傳統BIOS的工程師為了解決這類問題,像剛剛提到的介面卡BIOS容量過大,便要想辦法利用可能的排列組合硬擠出空間來放驅動代碼。而重組過程有時不小心造成一些副作用,例如才剛解決的bug,重組後又再發生!也就是說,UEFI BIOS可以更有系統的分配儲存空間,避免使用強制定址。
2. 什麼系統都能用
另外,傳統BIOS的硬體服務程式都是以16位元代碼的形式存在,在增強模式下執行的作業系統想存取這些服務會有困難。因此BIOS提供的服務在現實中只能提供給MS-DOS之類的系統用。
相對的,UEFI系統下的驅動並不是可以直接在CPU執行的代碼,而是用EBC(EFI Byte Code)這種專用於EFI driver的虛擬機器指令,該指令必須在UEFI的DXE階段被解壓縮後翻譯執行。
如此便有更佳的向下相容性,因為EFI driver是彈性的驅動程式模組架構,可不斷的擴充驅動程式及介面,不用重新編寫,所以就無需考慮因系統升級所衍生的相容性因素。
3. 開發維護更容易
加上EFI driver開發簡單,所有的PC零組件廠商都可以參與,就像現代作業系統的開發模式,這樣的模式曾使Windows系統短短幾年就變得無比強大。有了EFI driver,也可以讓顯示卡在開機階段就載入某種程度的功能,進而可以把傳統文字介面為主的BIOS轉成圖形介面。
4. 精簡系統用途大
最後還有EFI Shell,這是個精簡的作業系統,可以讓使用者進行BIOS的更新、系統診斷、安裝特定軟體。有了UEFI BIOS甚至可以播放CD和DVD而不需完全載入OS,EFI driver可以被載入或卸載,連TCP/IP核心程式都可以使用。基於EFI的driver model可使UEFI系統接觸到所有的硬體功能,在進入作業系統之前瀏覽網站不再是天方夜譚,甚至實作起來也非常簡單。總之,對使用者而言,多了一個方便的環境以及華麗的圖形介面,是最明顯的好處。
傳統BIOS vs. UEFI BIOS重點差異 | ||
BIOS種類 | 傳統BIOS | UEFI BIOS |
程式語言 | 組合語言 | C語言 |
資源控制 | 中斷向量 寫死的記憶體存取 寫死的輸出/輸入存取 |
驅動程式/協定 |
處理器運行環境 | X86 16位元 | CPU保護模式 |
擴充方式 | 接合中斷向量 | 載入驅動程式 |
第三方IHV和ISV支援性 | 較差 | 較佳且可以支援多平台 |
圖形化能力 | 較差 | 較佳 |
內建簡化的作業系統前環境 | 無 | 有 |
有誰在用UEFI?
UEFI支援必須藉由軟硬體的相互合作來達成,我們來看看目前市面上流通的產品中,哪些已經採用了UEFI。
支援UEFI的硬體
1. 2006年,蘋果電腦推出第一台使用Intel處理器架構的麥金塔電腦。從此開始用EFI/UEFI framework,而非以往搭載IBM PowerPC處理器的麥金塔電腦用的、發源於Sun Microsystems(昇陽電腦公司)的Open Firmware。
▲ 目前新版的Mac OS X都已經支援UEFI。
2. Intel自家的行動型、桌上型和伺服器電腦主機板自2006年起開始全面轉換為EFI/UEFI BIOS。例如從945系列晶片組開始,Intel的主機板就已經使用了該framework。
3. 此外,2008年開始,許多64位元電腦系統也正式支援EFI/UEFI BIOS。如IBM的x3450伺服器、微星科技具備ClickBIOS的主機板(包括下一篇介紹的EFINITY主機板)、HP筆記型電腦EliteBook系列和平板電腦、HP Compaq筆記型電腦較新的機種。
▲ 微軟到了Windows Server 2008才開始支援UEFI。
支援UEFI的作業系統
1. 早在2000年,Linux作業系統便可以支援EFI,當時是elilo EFIboot loader(開機載體),演化至今是EFI版本的grub。
2. 蘋果電腦到了Mac OS X 10.4(代號Tiger)的Intel版便可以支援EFI。
3. 2002年微軟給Itanium CPU使用的Windows 2000 Advanced Server Limited Edition及Datacenter Server Limited Edition版支援了EFI v1.10規範。後來的Windows Server 2003 for IA-64版和Windows XP 64-bit版本也支援EFI。至於UEFI的支援是從Windows Server 2008和Vista SP1的64位元版本開始,包括Windows 7也只有64位元版完整支援UEFI。
▲ Intel自家的D945PSN主機板。
> Mac OS X之所以不能裝在PC上,是不是因為BIOS不一樣的關係 ? 那以後如果都用UEFI,是不是就可以在PC上裝OS X了?
(⊙ˍ⊙)
個人覺得應該沒那麼簡單,先不談版權的問題,
單單device driver 的支援要能應付PC的五花八門硬體,
就要不少人力來做了。
> 不是出現過讓自組PC能用OS X的USB Dongle ?
這我知道,好像叫EFI-X <( ̄︶ ̄)>
http://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E5%8F%AF%E5%BB%B6%E4%BC%B8%E9%9F%8C%E9%AB%94%E4%BB%8B%E9%9D%A2