Stories

Detail Return Return

EDKII工程結構介紹 - Stories Detail

EDK2工程結構介紹

  • EDk2開發環境的安裝

目錄

  • 一、EDK2工程目錄的一級結構
  • 二、常用的目錄文件
    • 2.1 BaseTools--構建工具鏈
    • 2.2 Conf--配置目錄
    • 2.3 MdePkg--基礎核心包
    • 2.4 MdeModulePkg -- 常用模塊包
    • 2.5 OvmfPkg--OVMF固件工程目錄
  • 總結

一、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--構建工具鏈

  1. 主要的子目錄

    BaseTools/
    ├── Source/
    │   ├── C/        # 用 C 寫的底層工具(如 GenFw、GenFds)
    │   ├── Python/   # Python腳本,如 build.py、TargetTool.py
    │   └── Vfr/      # 處理 VFR (Visual Form Representation) 文件
    └── Scripts/
    
  2. BaseTools相當於編譯器+腳本+構建系統。EDk2中所有工程編譯都依賴這個目錄裏的工具,在編譯EDk2工程之前,首先就要執行make -C BaseTools。編譯出的關鍵命令如:GenFwGenFdsbuildVfrCompile等。隨後執行edksetup.sh,上面編譯出的命令就會被添加到環境變量PATH中。

2.2 Conf--配置目錄

  1. 主要的目錄文件

    Conf/
    ├── target.txt     # 構建目標(最重要!)
    ├── tools_def.txt  # 定義編譯器工具鏈
    └── build_rule.txt # 定義構建規則
    
    # 以上文件在執行 source edksetup.sh 之後自動從 BaseTools/Conf 複製到當前的 Conf/ 目錄中
    
  2. 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
    
  3. 也可以build的時候設置臨時參數build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc -b DEBUG

2.3 MdePkg--基礎核心包

  1. 內容

    Include/	# 各種 UEFI 接口頭文件(例如 Uefi.h)
    Library/	# 各種庫(如 DebugLib、BaseLib)
    Protocol/	# UEFI 協議定義
    
  2. MdePkg相當於C標準庫和操作系統內核API,提供了整個EDK2架構所需的基礎定義和接口。

2.4 MdeModulePkg -- 常用模塊包

  1. 目錄結構

    MdeModulePkg/
    ├── Application/     # 應用(比如 HelloWorld)
    ├── Library/
    ├── Universal/       # 通用驅動模塊
    └── Bus/             # 各種總線類驅動
    
  2. MdeModulePkgMdePkg的基礎上實現了很多實際可用的模塊,比如,UEFI驅動(Driver),UEFI 應用(Application),常見的服務(如Variable服務、Boot Manager)。

2.5 OvmfPkg--OVMF固件工程目錄

Open Virtual Machine Firmware Package

  1. 目錄結構

    OvmfPkg/
    ├── OvmfPkgX64.dsc   # 平台描述文件
    ├── OvmfPkgX64.fdf   # 鏡像佈局文件
    ├── PlatformDxe/     # 平台初始化驅動
    ├── Include/
    └── Library/
    
  2. 這是用於在QEMU虛擬機上運行的完整的UEFI固件工程,支持X64、IA32平台。該虛擬平台固件實現包在編譯後輸出文件OVMF.fd(完整的固件鏡像)和OVMF_CODE.fd / OVMF_VARS.fd分區鏡像(代碼和變量區分離版本)。要編譯該鏡像,前面我們配置了target.txtACTIVE_PLATFORM=OvmfPkg/OvmfPkgX64.dsc

總結

本文只是對EDK2工程主要文件的一個大概理解,有助於建立系統性的思考,後續深入學習中會繼續補充。


寄語:每天進步一點點,腳踏實地!

user avatar GalaxySinCos Avatar suxyio Avatar zdyz Avatar veronicaaa Avatar
Favorites 4 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.