UEFI 詳解

UEFI 是什麼?

UEFI - Unified Extensible Firmware Interface   統一可擴展固件接口
從規範的角度來看,它是一個規範,定義了計算機操作系統和平臺固件之間的接口規範.

從實體的角度來講,BIOS 和 UEFI 是兩種不同類型的計算機固件(什麼是固件?就是固化在計算機主板上某個非易失存儲區(EEPROM)中的小系統),計算機啓動都是先啓動它,然後加載真正的操作系統,計算機啓動後進入配置界面,我們能直觀看到的是 UEFI 固件的 UI,我們通過 UI 來配置這個固件的可配置項,比如:操作系統啓動順序,啓動等待時間等等,在 BIOS 時代,所有的設置都只能存儲在主板上,容量很小,無法擴展,而 UEFI 將基礎固件燒製在主板存儲區中,然後在磁盤上創建 EFI 系統分區來存儲更多的內容和數據,通過 UEFI 規範來定義如何使用擴展的方式來定製和擴展功能。

EFI 系統分區

我們知道在 UEFI 之前的 BIOS 時代,操作系統的 bootlloader 是存放在主引導記錄(MBR)中的,容量受限,所以 UEFI 中引入了一個新的系統分區 ESP (EFI System Partition) ,該分區用來存儲操作系統的 bootloader 和 EFI 驅動程序等數據,當計算機啓動後,UEFI 固件從該分區中加載所需要的硬件驅動,執行 bootloader 啓動指定的操作系統。在 Windows 系統中默認該分區不可見,可以參照 如何查看 EFI 分區內容 查看 EFI 分區中的內容。

                                                                         EFI 系統分區

EFI 可執行文件

UEFI 標準定義了一種可執行文件格式,所有的 UEFI 固件都能夠執行以這種格式編寫的代碼,操作系統 bootloader 都採用這種格式編寫,比如 Windows 10 64位操作系統的 bootloader 叫做 bootx64.efi,該文件存放在 EFI 系統分區的 Boot 文件夾下,如果一臺機器上安裝了多個廠商的操作系統,他們的 bootloader 都位於 EFI 系統分區的 Boot 目錄中,UEFI 就是通過執行這個 bootloader 來啓動指定的操作系統。

                                                 UEFI 系統分區中的操作系統 bootloader

GPT 分區表

GUID 分區表格式與 UEFI 規範具有密切聯繫,而且,它並不特別複雜,GPT 是 UEFI 規範提供的良好基礎架構之一。GPT 僅僅是分區表的一種標準(磁盤起始位置的信息定義了磁盤所包含的分區)。相比 MBR/MS-DOS 分區表,這種分區表對分區的定義要好得多,並且 UEFI 規範要求 UEFI 兼容固件必須能識別 GPT(也要求固件能識別 MBR,以保證向後兼容)。

BIOS 如何啓動

在瞭解 UEFI 啓動之前,我們看一下 BIOS 的啓動過程,BIOS 啓動過程非常簡單,你需要在第一塊磁盤上有一個 MBR(主引導記錄,這是一個標準,它定義了一種格式來描述該磁盤分區,並在特定的地方包含一個 boot loader),BIOS 通過加載 MBR 中的這段 boot loader 代碼去啓動操作系統,操作系統安裝程序負責在系統安裝過程中將 boot loader 代碼寫入到 MBR 中的特定區域。

                                                                             BIOS 啓動過程

從 BIOS 的啓動過程中我們可以看出,BIOS 方案存在以下問題:

  • 處理不便,你需要特殊工具來寫入 MBR,如果要查看 MBR 中包含的內容,唯一的方法幾乎就是把 MBR dump 出來,然後進行檢查
  • MBR 容量受限,無法容納現代操作系統的 bootloader
  • 無法實現從其他啓動目標來啓動系統,比如:網絡啓動
  • 固件層以上的其他層(比如在操作系統中)無法配置固件的啓動行爲,BIOS 沒有提供相應機制

UEFI 如何啓動

UEFI 規範定義了一個 boot manager, 它是一個固件策略引擎,可以靈活配置,通過下圖的對比圖可以看到 UEFI 的啓動過程。整個流程沒有什麼神奇的地方,主要的優勢是靈活性和可配置型以及可定製的安全性。

                                                       BIOS 和 UEFI 啓動對比

Secure Boot

安全啓動解決的問題就是 rootkit 攻擊問題。
UEFI 規範規定了固件可以包含一系列簽名,並拒絕運行未簽名或簽名與固件中包含的簽名不一致的 EFI 可執行文件,通俗地講,安全啓動就是使用非對稱加密和數字簽名技術來確保整個啓動鏈的安全,所有不合法的 UEFI 執行程序和驅動程序都不允許執行,這樣就解決了操作系統加載前的啓動安全問題。當然這是一個可選項,用戶可以在 UEFI 配置界面關閉 Secure Boot。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章