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--构建工具链 
 
 
- 主要的子目录
- 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工程主要文件的一个大概理解,有助于建立系统性的思考,后续深入学习中会继续补充。 
寄语:每天进步一点点,践踏实地! 
 
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |   
            
        
 
  
 | 
| 
        
        
        
        
        
        
 | 
| 
 | 
  相关推荐
  
 | 
| 
 |