EDKII工程結構介紹
EDK2工程結構介紹
目錄
一、EDK2工程目錄的一級結構
ayuan@ayuan-virtual-machine:~/src/edk2$ tree -L 1
.
├── ArmPkg # ARM架構相關代碼
├── ArmPlatformPkg
├── ArmVirtPkg
├── BaseTools # 編譯EDK2所需基礎工具集,包含編譯器,鏈接器等
├── Build # 構建輸出目錄,編譯后生成的文件,包括各種平臺的固件鏡像
├── Conf # target.txt文件用于定義要構建的平臺,構建目標和工具鏈配置
├── CONTRIBUTING.md
├── CryptoPkg # OpenSSL加密支持
├── DynamicTablesPkg
├── edksetup.bat
├── edksetup.sh # 環境配置腳本,設置編譯環境變量,初始化工作環境
├── EmbeddedPkg
├── EmulatorPkg
├── FatPkg
├── FmpDevicePkg
├── IntelFsp2Pkg
├── IntelFsp2WrapperPkg
├── License-History.txt
├── License.txt
├── Maintainers.txt
├── MdeModulePkg # 模塊化核心包
├── MdePkg # 最基礎的核心包,UEFI標準定義,基本數據類型和庫函數
├── NetworkPkg # 網絡協議棧
├── OvmfPkg # 虛擬機固件
├── PcAtChipsetPkg
├── pip-requirements.txt
├── PrmPkg
├── ReadMe.rst
├── RedfishPkg
├── SecurityPkg # 安全功能
├── ShellPkg # shell命令行界面
├── SignedCapsulePkg
├── SourceLevelDebugPkg
├── StandaloneMmPkg
├── UefiCpuPkg # x86 CPU相關功能
├── UefiPayloadPkg
└── UnitTestFrameworkPkg
29 directories, 8 files
二、常用的目錄文件
2.1 BaseTools--構建工具鏈
-
主要的子目錄
BaseTools/ ├── Source/ │ ├── C/ # 用 C 寫的底層工具(如 GenFw、GenFds) │ ├── Python/ # Python腳本,如 build.py、TargetTool.py │ └── Vfr/ # 處理 VFR (Visual Form Representation) 文件 └── Scripts/ -
BaseTools相當于編譯器+腳本+構建系統。EDk2中所有工程編譯都依賴這個目錄里的工具,在編譯EDk2工程之前,首先就要執行make -C BaseTools。編譯出的關鍵命令如:GenFw、GenFds、build、VfrCompile等。隨后執行edksetup.sh,上面編譯出的命令就會被添加到環境變量PATH中。
2.2 Conf--配置目錄
-
主要的目錄文件
Conf/ ├── target.txt # 構建目標(最重要!) ├── tools_def.txt # 定義編譯器工具鏈 └── build_rule.txt # 定義構建規則 # 以上文件在執行 source edksetup.sh 之后自動從 BaseTools/Conf 復制到當前的 Conf/ 目錄中 -
Conf中最主要的文件是target.txt。它告訴編譯系統使用哪個平臺(.dsc),目標架構是什么,使用的編譯工具鏈是什么,輸出的目錄位置等。要修改的主要參數如下:# 適用于本地x86_64的最小配置 ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc TARGET = DEBUG TARGET_ARCH = X64 TOOL_CHAIN_TAG = GCC5 BUILD_RULE_CONF = Conf/build_rule.txt -
也可以
build的時候設置臨時參數build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc -b DEBUG。
2.3 MdePkg--基礎核心包
-
內容
Include/ # 各種 UEFI 接口頭文件(例如 Uefi.h) Library/ # 各種庫(如 DebugLib、BaseLib) Protocol/ # UEFI 協議定義 -
MdePkg相當于C標準庫和操作系統內核API,提供了整個EDK2架構所需的基礎定義和接口。
2.4 MdeModulePkg -- 常用模塊包
-
目錄結構
MdeModulePkg/ ├── Application/ # 應用(比如 HelloWorld) ├── Library/ ├── Universal/ # 通用驅動模塊 └── Bus/ # 各種總線類驅動 -
MdeModulePkg在MdePkg的基礎上實現了很多實際可用的模塊,比如,UEFI驅動(Driver),UEFI應用(Application),常見的服務(如Variable服務、Boot Manager)。
2.5 OvmfPkg--OVMF固件工程目錄
Open Virtual Machine Firmware Package
-
目錄結構
OvmfPkg/ ├── OvmfPkgX64.dsc # 平臺描述文件 ├── OvmfPkgX64.fdf # 鏡像布局文件 ├── PlatformDxe/ # 平臺初始化驅動 ├── Include/ └── Library/ -
這是用于在
QEMU虛擬機上運行的完整的UEFI固件工程,支持X64、IA32平臺。該虛擬平臺固件實現包在編譯后輸出文件OVMF.fd(完整的固件鏡像)和OVMF_CODE.fd/OVMF_VARS.fd分區鏡像(代碼和變量區分離版本)。要編譯該鏡像,前面我們配置了target.txt中ACTIVE_PLATFORM=OvmfPkg/OvmfPkgX64.dsc。
總結
本文只是對EDK2工程主要文件的一個大概理解,有助于建立系統性的思考,后續深入學習中會繼續補充。
寄語:每天進步一點點,腳踏實地!

浙公網安備 33010602011771號