本頁使用了標題或全文手工轉換

統一可延伸韌體介面

維基百科,自由的百科全書
跳至導覽 跳至搜尋
可擴展韌體介面在軟件堆疊裡的位置

統一可延伸韌體介面英語:Unified Extensible Firmware Interface,縮寫UEFI)是一種個人電腦系統規格,用來定義作業系統與系統固件之間的軟件界面,作為BIOS的替代方案[1]。可擴展固件接口負責加電自檢(POST)、聯繫作業系統以及提供連接作業系統與硬體的介面。

UEFI的前身是Intel在1998年開始開發的Intel Boot Initiative,後來被重命名為可延伸韌體介面Extensible Firmware Interface,縮寫EFI)。Intel在2005年將其交由統一可擴展固件接口論壇(Unified EFI Forum)來推廣與發展,為了凸顯這一點,EFI也更名為UEFI(Unified EFI)。UEFI論壇的創始者是11家知名電腦公司,包括Intel、IBM等硬件廠商,軟件廠商Microsoft,及BIOS廠商AMI英語American MegatrendsInsydePhoenix

歷史[編輯]

EFI開機管理員與 EFI drivers的溝通方式

EFI最早是Intel為Intel Itanium處理器設計的韌體規範。自從IBM PC兼容機廠商(如COMPAQ)和BIOS提供商(如Phoenix)通過淨室的方式製造出BIOS程式,BIOS就以16位匯編代碼,寄存器參數調用方式,以及1MB以下記憶體尋址的形式存在了很長時間。雖然在各大廠商的努力下,有許多新元素添加到BIOS中,如進階電源管理(APM)、舊式隨插即用英語Legacy Plug and PlayACPIUSB等等,但BIOS的根本性質沒有得到任何改變。雖然x86處理器已經由16位先後升級到32位、64位(x86-64),但是BIOS仍然以16位真實模式執行。基於16位真實模式的BIOS具有許多缺點,如擴充性差,系統啟動緩慢,開發困難,使用者界面不友好等。

英特爾將EFI定義為一個可擴展的,標準化的固件接口規範,不同於開發困難,缺乏文件的傳統BIOS。英特爾於2002年釋放出EFI 1.1版本。2005年,英特爾等公司成立UEFI論壇,EFI也更名為UEFI,由UEFI論壇進行相關規範的制定。2007年1月釋放出UEFI 2.1版,較1.1版增加了加密編碼(cryptography)、網絡認證(network authentication)與用戶接口架構(User Interface Architecture,HII)。2009年5月發布UEFI 2.3版。2019年3月發布的UEFI 2.8是最新的UEFI規範版本。

優點[編輯]

相較舊式BIOS(Legacy BIOS),UEFI有以下優點:

  • 模塊化、規範化的設計
  • 大部分代碼使用C語言編寫
  • 靈活的預啟動(Pre-Boot或Pre-OS)環境,包括網路功能。
  • 可選基於EFI Byte Code(EBC)的,CPU架構獨立的UEFI驅動程式(UEFI Drivers)。
  • 通過GPT分割表可使用大於2TB的硬碟。

相容性[編輯]

處理器相容性[編輯]

UEFI 2.5支援x86-64x86-32IA-64ARM(AArch32)、ARM64(AArch64)架構。UEFI 2.7正式加入對RISC-V架構的支援[2]

舊式BIOS(Legacy BIOS)以16位元真實模式執行,只能尋址1MB的記憶體。UEFI直接以32位元模式或64位元模式執行,突破了舊式BIOS只能尋址1MB的限制。

UEFI要求UEFI韌體與作業系統內核(或作業系統的啟動程式)位元數相同。比如,64位元UEFI韌體只能載入64位元的作業系統內核啟動程式。當系統從Boot Service轉換到Runtime Service後,將由作業系統內核接管系統。作業系統內核也可以切換處理器模式,但這會禁用Runtime Services(除非內核將處理器模式切換回原本的模式)[3]。3.15版本及其後的Linux內核支援在32位元UEFI韌體上啟動並執行64位元Linux內核,要求啟動程式支援UEFI handover協定,且處理器支援x86-64[4]

磁碟相容性[編輯]

舊式BIOS使用的是MBR磁碟分割表,MBR僅支援最大2TB的物理磁碟大小,只支援最多4個主磁碟分割。EFI/UEFI規範引入了GPT磁碟分割表,GPT支援最大8ZB的物理磁碟大小。

Compatibility Support Module (CSM)[編輯]

CSM可提供Legacy BIOS相容性。

統一可延伸韌體介面(UEFI)和操作系統[編輯]

UEFI在概念上類似於一個低階的操作系統,並且具有操控所有硬件資源的能力。不少人感覺它的不斷發展將有可能代替現代的操作系統。事實上,EFI的締造者們在第一版規範出台時就將EFI的能力限制於不足以威脅操作系統的統治地位。首先,它只是硬件和韌體、預啟動軟件間的接口規範;其次,UEFI環境下不提供中斷的機制,也就是說每個EFI驅動程序必須用輪詢(polling)的方式來檢查硬件狀態,並且需要以解釋的方式運行,較操作系統下的機械碼驅動效率更低;再則,UEFI系統不提供複雜的緩存器保護功能,它只具備簡單的緩存器管理機制,具體來說就是指運行在x64x86處理器的64位元模式或保護模式下,以最大尋址能力為限把緩存器分為一個平坦的段(Segment),所有的程序都有權限存取任何一段位置,並不提供真實的保護服務。當UEFI所有組件加載完畢時,便會啟動作業系統啟動程式,如果UEFI韌體內建EFI Shell,也可以啟動EFI Shell命令提示(類似於DOS命令提示畫面)。大部分OEM電腦的UEFI會在功能表上提供執行內建診斷程式、內建還原程式的功能。EFI應用程式和EFI驅動程式是PE格式的.efi檔案,可用C語言編寫。在UEFI開機模式下,作業系統的啟動程式也是EFI應用程式,啟動程式的EFI檔案儲存在EFI系統分區(ESP)上。作業系統的啟動程式將控制權交給操作系統並執行UEFI函式ExitBootServices()後,停止UEFI的Boot Services,結束由UEFI韌體控制硬體的階段,由作業系統直接控制硬體,UEFI的少部分服務如Runtime Services、UEFI GOP(作業系統載入顯示卡驅動程式後則不再使用UEFI GOP)等等則繼續工作,為作業系統提供系統時間等功能。

統一可延伸韌體介面(UEFI)的組成[編輯]

x64電腦平台的UEFI通常包含以下幾個部分:

  1. Pre-EFI(PEI)初始化模塊
  2. EFI驅動程序執行環境(DXE)
  3. 系統管理模式(SMM)
  4. EFI驅動程序
  5. 兼容性支持模塊(CSM)
  6. Boot Device Select(BDS)
  7. EFI應用程式
  8. 全局唯一標識分區表

在實現中,統一可延伸韌體介面(UEFI)初始化模塊和驅動執行環境通常被集成在一個只讀存儲器中。Pre-EFI初始化程序在系統開機的時候最先得到執行,完成記憶體的初始化工作,然後載入UEFI DXE(驅動程序執行環境)。當DXE被載入運行時,系統便具有了枚舉並加載其他UEFI驅動程序的能力。在基於PCI Express架構的x64電腦系統中,系統會載入UEFI內建的EFI驅動程式模組,完成UEFI韌體、CPU、記憶體、晶片組、主板、ACPISMM的初始化,初始化晶片組內建的PCI Express/PCI裝置(如晶片組內建的SATAUSB網卡等功能)以及各種PCI Express/PCI裝置,並載入這些PCI裝置的UEFI驅動程式(如PCI Express裝置的Option ROM)。在UEFI規範中,新的全局唯一標識分區表(GPT)被引入,新的GPT分區表支援最多128個主分區(在MBR分區表下,最多只能有4個主分區),另外UEFI+GPT結合還可以支持2.1 TB以上硬盤(3TB以上硬盤使用MBR分區表,並且安裝Windows 64位系統,Windows只能識別到2.1TB)。GPT分區表的硬碟可包含EFI系統分區(ESP),EFI系統分區(ESP)可以被UEFI固件訪問,可儲存操作系統的引導程序、EFI應用程序(如OEM的硬體診斷程式)等等。UEFI韌體通過執行EFI系統分區中的啟動程式檔案(副檔名為.EFI的UEFI應用程式)啟動作業系統。CSM是在x86平台UEFI固件中的一個特殊的模塊,它將為不具備UEFI引導能力的操作系統以及16位的傳統Option ROM(即非EFI的Option ROM)提供類似於傳統BIOS的系統服務。Secure Boot功能要求原生UEFI(即關閉CSM),因此在UEFI韌體設定中開啟CSM前,需要在UEFI韌體設定中關閉Secure Boot。

統一可延伸韌體介面(UEFI)的發展[編輯]

Intel EFI最早被用於Intel Itanium(IA-64)系統中。Intel、AMD、HP、Apple等企業於2005年共同成立UEFI論壇(UEFI Forum)。早年UEFI並未成熟,2011年以前大部分個人電腦並不支援UEFI開機。最早採用EFI韌體的電腦之一是Apple的Intel Mac(Apple自推出Intel Mac後,所有採用Intel處理器的麥金塔電腦都使用EFI韌體)。隨後微星科技推出了少數支援UEFI的主板(同時期採用UEFI韌體的零售PC主板很少)。2009年IBMDell也推出了採用UEFI韌體的伺服器,HP等電腦廠商也推出了少量支援UEFI開機的高階個人電腦。一些採用UEFI/EFI規範的BIOS韌體,只支援Legacy開機,不支援EFI開機。從2011年開始,大多數零售主機板採用UEFI韌體並支援UEFI開機,但當時大部分PC顯示卡(包括Intel處理器的Intel HD Graphics內顯)未支援UEFI GOP規範,需要UEFI韌體的CSM才可以初始化顯示卡。英特爾的Ivy Bridge平台進一步完善UEFI支援,比如改善Intel HD Graphics內顯的UEFI GOP支援,支援原生UEFI(即沒有CSM的UEFI),支援Secure Boot。從Ivy Bridge平台開始,大部分PC主板的UEFI可以關閉CSM(雖然UEFI提供關閉CSM的選項,但是如果顯示卡不支援UEFI GOP規範,則無法關閉CSM,或者關閉CSM後系統無法開機),隨後,微軟又要求,預裝Windows 8的電腦,必須採用UEFI開機模式,以及Secure Boot。從2014年開始,大部分零售顯示卡逐步支援UEFI GOP及Secure Boot。

作業系統支援[編輯]

Linux內核自2000年開始,已經支援EFI啟動。早期使用ELILO作為EFI下的啟動程式。現在,GRUB的EFI版本已代替ELILO,大多數Linux發行版已使用GRUB作為UEFI下的啟動程式。從Linux版本3.15起,來自英代爾的工程師Matt Fleming將64位元核心提供了支援32位元UEFI韌體的可能,前提只需要UEFI作業系統啟動程式支援EFI handover協定[5] ,譬如流行的GRUB2。同樣流行的32位元版Linux,譬如Ubuntu 16.04.3 LTS,也可以使用這類啟動程式在64位元版UEFI韌體的機器上使用。

安騰版本的Windows 2000已於2002年加入對EFI 1.10的支持。安騰版本的Windows Server 2003Windows XP 64-Bit Edition(以IA-64架構作為執行平台)已支援EFI。

Windows Vista SP1開始,x86-64架構的Windows作業系統已支援UEFI。但是,若在UEFI模式下安裝和啟動Windows Vista SP1(或Windows Server 2008)或Windows 7(或Windows Server 2008 R2)通常需要在UEFI韌體設定中開啟CSM[6],因為Windows 7/Windows Server 2008 R2並不支援原生UEFI顯示使用的UEFI GOP協定。32位元的Windows Vista和Windows 7不支援UEFI啟動。從Windows 8開始,支援Secure Boot,UEFI模式下的啟動亦無須CSM(支援原生UEFI),32位元版本的Windows 8亦支援32位元的UEFI(不支援64位元的UEFI)。

現在,x86-64架構的FreeBSDOpenBSDNetBSD已支援UEFI。

虛擬機器對UEFI的模擬[編輯]

VMware Workstation支援對UEFI的模擬,但是在VMware Workstation 11以前,VMware Workstation並未正式支援UEFI,需要手動編輯虛擬機的.vmx檔案以開啟虛擬機器的UEFI。VMware Workstation 11及以後的版本正式支援對UEFI的模擬。從VMware Workstation 14開始支援Secure Boot。

VirtualBox支援對UEFI的模擬,但是VirtualBox的UEFI並不支援Windows Vista和Windows 7。

QEMU/KVM可通過OVMF支援對UEFI的模擬。

微軟Hyper-V英語Hyper-V的第二代虛擬機器支援對UEFI的模擬,以及Secure Boot。

UEFI系統類別[編輯]

類別0,舊式BIOS韌體,只支援舊式開機。

類別1,UEFI韌體,啟用CSM,只支援舊式開機,不提供UEFI開機功能。

類別2,UEFI韌體,啟用CSM,同時支援舊式開機和UEFI開機。

類別3,UEFI韌體,不提供CSM,只支援UEFI開機。

類別3+,在類別3的基礎上提供並啟用Secure Boot功能。

微軟Windows 8及之後的Windows作業系統適用於上述所有類別的電腦。所有支援UEFI啟動的Linux作業系統適用於類別0至類別3的電腦,部分分發版也支援類別3+中的Secure Boot功能,譬如Ubuntu等。 Intel計劃於2020年完全捨棄Legacy BIOS,Intel平台的所有產品將使用UEFI Class 3(有一部分產品可能是3+)[7]

批評[編輯]

Ronald G. Minnich(coreboot的共同作者)和 Cory Doctorow(科幻小說家)和數位權利運動者批評EFI是企圖藉由禁止使用者完整控制他們的電腦,來保護智慧財產權[8][9]它並沒有解決BIOS長期以來對多數硬體需要兩種不同驅動程式的問題--一個給韌體,一個給作業系統[10]

TianoCore(一個提供製作基於UEFI自由韌體工具的開放原始碼專案)[11]缺乏用來啟動晶片組的專門的驅動程式,因此需要晶片組廠商提供額外的功能。TianoCore是coreboot的一個附加選項,它包含了啟動晶片組的程式碼。

由於UEFI比起原先的BIOS技術可以對遠端網路開機提供更高的彈性,因此在標準的安全規定有一些疑慮。[12]

Secure Boot[編輯]

在UEFI 2.3.1 Errata C規範中定義了一項名為「Secure Boot」的協定,Secure Boot只允許載入有適當數位簽章的EFI驅動程式和EFI啟動程式,作業系統核心也只載入有特定有效數位簽章的驅動程式(尤其是Windows 10,當開啟UEFI Secure Boot後,對驅動程式數位簽章的檢查更嚴格),因此Secure Boot可讓開機過程更安全。但是Red Hat開發者Matthew Garrett在他的文章"UEFI secure booting"中憂慮UEFI的Secure Boot功能可能會影響Linux(貼有Windows 8認證貼紙的機器,預設Secure Boot啟動,只預載了OEM微軟金鑰,可能無法以Linux開機)。[13][14]微軟回應稱顧客可以停用UEFI韌體中的secure boot。[15][16]然而,某些OEM廠商仍然可能在其產品中省略這項功能。稍晚,報告指出微軟顯然禁止在ARM系統上實作停用Secure Boot的功能。[17][18]

自由軟體基金會(FSF)的Josh Gay對UEFI的"Secure Boot"實作提出憂慮,並發表公開聲明及連署說:

我們—連署者—敦促所有實作了UEFI中稱為"Secure Boot"的電腦製造商立即允許自由的作業系統可以被安裝。基於尊重使用者的自由權以及確切保護使用者安全,製造商必須允許電腦擁有者停用開機限制,或是提供一個確切可能的方法讓他們安裝並執行自由的作業系統。我們承諾我們將不會購買、也不會推薦剝奪使用者重要自由的電腦,並且,我們將積極地敦促社會大眾避免如此禁錮使用者的系統。[19][20]

2012年1月,微軟釋出一份關於OEM硬體認證的文件,指出所有的x86x86-64裝置應該將UEFI Secure Boot啟動,不過可以改用一個可讓使用者增加數位簽章的自訂secure boot模式。然而,在執行Windows的ARM裝置上使用自訂secure boot模式或停用都是不可能的[21]。這份稱為Windows硬體認證需求(英語:Windows Hardware Certification Requirements[22]證實了執行Windows 8、基於ARM的裝置被禁止了任何安裝其他作業系統的可能性。現在,UbuntuFedoraopenSUSERHEL(從RHEL 7開始)、CentOS(從CentOS 7開始)等Linux發行版已經支援Secure Boot。大部分PC/x86伺服器也可以關閉Secure Boot(包括微軟Surface)。Windows 8以後的微軟Windows作業系統可支援Secure Boot,Windows 10在開啟Secure Boot的情況下更可使用Device Guard等功能。Secure Boot要求原生UEFI環境,即不能開啟CSM,也就是開啟Secure Boot的系統不支援Legacy開機及Legacy Option ROM。

安全性[編輯]

針對UEFI進行攻擊的可行性已經被證實,不過首支被確認的感染UEFI的rootkit惡意程式在2018年9月底才被發現。[23]該惡意程式在東歐、巴爾幹地區甚至到中歐均有被感染案例,去除該惡意程式的唯一方法是重新灌寫UEFI韌體,欲防止再次被感染則是要額外開啟Secure Boot或依靠主機板禁止更新韌體的功能,Intel 5 系列 PCH 以後的裝置也許不受影響,但不少政府部門、公司機構中仍保有大量的舊型且使用UEFI韌體的電腦,仍有大規模爆發的危險。[24]

注釋[編輯]

  1. ^ Kinney, Michael. Solving BIOS Boot Issues with EFI (PDF). Intel DeveloperUPDATEMagazine: 1. 
  2. ^ http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_7.pdf
  3. ^ http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_7.pdf
  4. ^ https://www.kernel.org/doc/Documentation/efi-stub.txt
  5. ^ Linux kernel 3.15, Section 1.3. EFI 64-bit kernels can be booted from 32-bit firmware. kernelnewbies.org. 2014-06-08 [2014-06-15]. 
  6. ^ UEFI 的 Windows 支援, Microsoft, [2017-11-25], (原始內容存檔於2017-12-01) 
  7. ^ Richardson, Brian. "Last Mile" Barriers to Removing Legacy BIOS (PDF). 30 October 2017 [22 November 2017]. 
  8. ^ Interview: Ronald G Minnich. Fosdem. 2007-02-06 [2010-09-14]. [永久失效連結]
  9. ^ Cory Doctorow, The Coming War on General Purpose Computation, 2011-12-27 [2013-07-11] 
  10. ^ coreboot (aka LinuxBIOS): The Free/Open-Source x86 Firmware. YouTube. 2008-10-31 [2010-09-14]. 
  11. ^ Welcome, TianoCore, SourceForge, (原始內容存檔於2012-04-23) .
  12. ^ Risks, UK: NCL .
  13. ^ Garrett, Matthew. UEFI secure booting. [2011-09-20]. 
  14. ^ Garrett, Matthew. UEFI secure booting. [2011-09-23]. 
  15. ^ MS denies secure boot will exclude Linux. The Register. 2011-09-23 [2011-09-24]. 
  16. ^ Protecting the pre-OS Environment with UEFI. Microsoft. 2011-09-22 [2011-09-24]. 
  17. ^ http://www.softwarefreedom.org/blog/2012/jan/12/microsoft-confirms-UEFI-fears-locks-down-ARM/
  18. ^ 存檔副本. [2017-03-07]. (原始內容存檔於2012-03-09). 
  19. ^ Gay, Josh. Will your computer's "Secure Boot" turn out to be "Restricted Boot"?. www.fsf.org. Free Software Foundation. [2011-10-25]. 
  20. ^ Stand up for your freedom to install free software. www.fsf.org. Free Software Foundation. [2011-10-25]. 
  21. ^ http://www.softwarefreedom.org/blog/2012/jan/12/microsoft-confirms-UEFI-fears-locks-down-ARM/
  22. ^ 存檔副本 (PDF). [2014-04-24]. (原始內容 (PDF)存檔於2014-06-11). 
  23. ^ ESET 發現第一個 UEFI rootkit 惡意程式 LoJax,感染後連重灌系統也沒轍. techbang.com. 2018-09-28 (中文(台灣)‎). 
  24. ^ LoJax: First UEFI rootkit found in the wild, courtesy of the Sednit group. WeLiveSecurity. 2018-09-27. 

參看[編輯]

外部連結[編輯]