EDK2工程结构介绍
- 一 EDk2开发环境的安装
目录
- 一、EDK2工程目录的一级结构
- 二、常用的目录文件 
- 2.1 BaseTools--构建工具链
- 2.2 Conf--配置目录
- 2.3 MdePkg--基础核心包
- 2.4  MdeModulePkg-- 常用模块包
- 2.5 OvmfPkg--OVMF固件工程目录
 
- 2.1 
- 总结
一、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
└── UnitTestFrameworkPkg29 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工程主要文件的一个大概理解,有助于建立系统性的思考,后续深入学习中会继续补充。
寄语:每天进步一点点,践踏实地!