UEFI(Unified Extensible Firmware Interface),是一種新的系統啟動方式,它在BIOS的基礎上,給計算機硬體提供了更多的控制和管理能力,使得計算機開機變得更快、更安全,並具有更強的擴展性。本文將從UEFI原理、UEFI編程實踐等多個方面對UEFI做詳細的闡述。
一、UEFI原理
UEFI相比於傳統BIOS的區別在於UEFI提供了更為豐富的介面和更強的擴展能力。UEFI使用了EFI手冊定義的Boot Services,Runtime Services以及Protocol來管理和控制操作系統。Boot Services包括了哪些設備和文件可以被載入,如何初始化EMU等功能。Runtime Services包括了與操作系統生命周期相關的代碼和數據等。Protocol則是用來把服務提供者和服務消費者聯繫起來的一種設施。
UEFI的框架基於兩個核心的抽象層:EFI僅使用4KB棧量大小的體系結構,並且支持從其啟動的唯一操作系統為64位 x86。UEFI還支持IA-64和ARMv8架構。從內部API的角度看,UEFI主要由兩個框架組成:Boot Services和Runtime Services。
以UEFI啟動為例,UEFI系統啟動時,會讀入一個文件system image,啟動時通過內置的EFI Firmware File System將文件讀入到內存中。然後將文件載入到特殊的內存映射區域即被稱為EFI Configuration Table的地方。該內存映射區域採用統一的結構化的可擴展固件介面(SMBIOS)數據存儲。SMBIOS存儲了主板、CPU、內存和硬碟等相關係統信息。
二、UEFI編程實踐
1、UEFI程序框架
與傳統的BISO相比,UEFI要求一些特殊的編程模式,例如在UEFI中要求所有的服務都是非同步執行,因此在編寫UEFI程序時,一般遵循以下的框架:
#include #include #include EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) { //Do Something return EFI_SUCCESS; }
其中UefiMain為UEFI程序的入口,其餘代碼為標準的C語言代碼。在UefiMain中,可以使用EFI系統介面調用UEFI框架中的各種服務,例如載入驅動程序、列印調試信息等操作。
2、UEFI驅動編程
UEFI驅動是指在UEFI系統上運行的一種具體的軟體,其作用是提供硬體設備的服務,例如提供關於啟動設備的信息、實現硬體設備的初始化和管理等。
以編寫簡單的磁碟驅動程序為例,其主要實現以下幾步:
(1)註冊協議
在EFi系統啟動後,UEFI執行的程序通過註冊協議來發布自己提供的服務。註冊協議的要求是在系統初始化階段,通過調用EfiBootServices中的EFI_STATUS EFI_BOOT_SERVICES.InstallProtocolInterface()或EFI_SATUS EFI_BOOT_SERVICES_.InstallMultipleProtocolInterfaces()函數,為驅動程序提供服務。
(2)實現協議介面
在註冊協議後,UEFI驅動程序需要為協議介面實現函數。在UEFI框架中,協議作為一種介面存在,驅動程序必須為這些介面實現一套對應的函數。
(3)添加平台設備驅動
驅動開始為特定的ETI驅動設備制定管理程序。驅動可以使用塊操作,對用於磁碟或其他塊設備的數據結構進行操作、搜索分區和讀取文件系統等操作。塊IO介面是UEFI系統編程中最重要的一個介面,他包含了處理磁碟和其他塊設備的大部分功能。
三、UEFI啟動原理
UEFI啟動過程包含四個主要的階段:
(1)SEC(Security)階段
作為計算機系統安全啟動的第一個步驟,SEC為UEFI BIOS固件提供最基本的安全框架和初始狀態,SEC第一條指令的執行將引導到PEI階段。SEC的主要任務包括檢測UEFI鏡像的有效性以及載入它,並檢測用於PEI階段的FV。為了更快和更嚴格的執行SEC階段,SEC本身只翻譯UEFI協議,不執行UEFI的服務,也不進入UEFI內存中。
(2)PEI(Pre-EFI Initialization)階段
PEI階段為UEFI固件提供了更多的功能,並更好地利用了UEFI固件中的每一個資源。PEI階段的主要任務是初始化和驗證UEFI鏡像中FV內的PEI。對於UEFI PEIM模塊,可提供內存查找/分類器、硬體驅動、CPU架構機制、內存操作、讀寫CMOS、加密支持、選擇啟動設備和保留內存等功能。
(3)DXE(Driver Execution Environment)階段
DXE階段是UEFI初始化的關鍵部分。在DXE階段,UEFI協議服務被激活,驅動程序被載入,空間被重複利用,並且各種服務開始執行。輸入和輸出功能是由UEFI協議定義的,以系統管理層服務和標準協議形式提供。此處運行DXE Driver、BDS以及一些BS Driver。
(4)BDS(Boot Devices Selection/preparation)階段
BDS階段主要功能是選擇啟動設備,若多個啟動設備可以用來啟動,那麼如邏輯設備啟動順序、啟動支持協議、啟動option、各種條件和用戶設置都可能會影響最終啟動設備的選擇。BDS階段還包括了操作系統啟動前需要準備的所有服務。例如,UEFI操作系統引導程序、Shell Manager和Shell啟動。
結語
本文介紹了UEFI的原理、編程實踐以及啟動原理等多個方面的內容。UEFI相比於傳統BIOS和普通的系統編程,具有更高的靈活性、更好的擴展性、運行更加可靠和更快的啟動速度等優點,今後UEFI編程將會逐漸發展成為一股新的潮流。
原創文章,作者:VHANN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371492.html