參考:UEFI原理與程式設計
硬 菜:
首先我們先理解一下兩個概念:模組(Module)、包(Package)。
我們可以在BOOT.XF.0.1/boot_images/ 目錄下看到有很多以*Pkg命名的資料夾,每一個這樣的資料夾稱爲一個Package,其實這樣的理解不太準確,應該說,「包」是一組模組及平臺描述檔案(.dsc檔案)、包宣告檔案(.dec檔案)組成的集合。模組是UEFI系統的一個特色。模組(可執行檔案.efi檔案)
像外掛一樣可以動態地載入到UEFI內核中。而每個工程模組由元數據檔案(.inf檔案)和原始檔組成。
模組型別 | 相應說明 |
---|---|
標準應用程式工程模組 | 在DXE階段執行的應用程式(Shell環境下也可以執行) |
ShellAppMain應用程式工程模組 | Shell環境下執行的應用程式 |
main應用程式工程模組 | Shell環境下執行的應用程式,並且應用程式鏈接了StdLib庫 |
UEFI驅動模組 | 符合UEFI驅動模組模型的驅動,僅在BS期間有效 |
庫模組 | 作爲靜態庫被其他模組呼叫 |
DXE驅動模組 | DXE環境下執行的驅動,此類驅動不遵循UEFI驅動模型 |
DXE執行時驅動模組 | 進入執行期仍然有效的驅動 |
DXE SAL驅動模組 | 僅對安騰CPU有效的一種驅動 |
DXE SMM驅動模組 | 系統管理模式驅動,模組被載入到系統管理記憶體區。系統進入執行期該驅動仍然有效 |
PEIM模組 | PEI階段的模組 |
SEC模組 | 韌體的SEC階段 |
PEI_CORE模組 | 韌體的PEI階段 |
DXE_CORE模組 | 韌體的DXE階段 |
必需塊 | 塊描述 |
---|---|
[Defines] | 定義本模組的屬性變數及其他變數,這些變數可在工程檔案其他塊中應用 |
[Sources] | 列出本模組的所有原始檔及資原始檔 |
[Packages] | 列出本模組參照到的所有包的宣告檔案。可能參照到的資源包括標頭檔案、GUID、Protocal等,這些資源都宣告在包的包宣告檔案.dec中 |
[LibraryClasses] | 列出本模組要鏈接的庫模組 |
非必需塊 | 塊描述 |
---|---|
[Protocols] | 列出本模組用到的Protocol |
[Guids] | 列出本模組用到的GUID |
[BuildOptions] | 指定編譯和鏈接選項 |
[Pcd] | Pcd全稱爲平臺設定數據庫(Platform Configuration Database)。用於列出本模組用到的Pcd變數,這些Pcd變數可被整個UEFI系統存取 |
[PcdEx] | 用於列出本模組用到的Pcd變數,這些Pcd變數可被整個UEFI系統存取 |
[FixedPcd] | 用於列出本模組用到的Pcd編譯期常數 |
[FeaturePcd] | 用於列出本模組用到的Pcd常數 |
[PatchPcd] | 列出的Pcd變數僅本模組可用 |
接下來,我們講述一下必需塊的用法:
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = UefiMain
FILE_GUID = 90A49AFD-42C3-08AE-9611-368652008636
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = Main
[Sources]
main.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
UefiApplicationEntryPoint