找回密码
 立即注册
首页 业界区 安全 EDKII工程结构介绍

EDKII工程结构介绍

峰邑 5 天前
EDK2工程结构介绍


  • 一 EDk2开发环境的安装
目录


  • 一、EDK2工程目录的一级结构
  • 二、常用的目录文件

    • 2.1 BaseTools--构建工具链
    • 2.2 Conf--配置目录
    • 2.3 MdePkg--基础核心包
    • 2.4  MdeModulePkg -- 常用模块包
    • 2.5 OvmfPkg--OVMF固件工程目录

  • 总结
一、EDK2工程目录的一级结构
  1. ayuan@ayuan-virtual-machine:~/src/edk2$ tree -L 1
  2. .
  3. ├── ArmPkg                        # ARM架构相关代码
  4. ├── ArmPlatformPkg
  5. ├── ArmVirtPkg
  6. ├── BaseTools                # 编译EDK2所需基础工具集,包含编译器,链接器等
  7. ├── Build                        # 构建输出目录,编译后生成的文件,包括各种平台的固件镜像
  8. ├── Conf                        # target.txt文件用于定义要构建的平台,构建目标和工具链配置
  9. ├── CONTRIBUTING.md
  10. ├── CryptoPkg                # OpenSSL加密支持
  11. ├── DynamicTablesPkg
  12. ├── edksetup.bat
  13. ├── edksetup.sh                # 环境配置脚本,设置编译环境变量,初始化工作环境
  14. ├── EmbeddedPkg
  15. ├── EmulatorPkg
  16. ├── FatPkg
  17. ├── FmpDevicePkg
  18. ├── IntelFsp2Pkg
  19. ├── IntelFsp2WrapperPkg
  20. ├── License-History.txt
  21. ├── License.txt
  22. ├── Maintainers.txt
  23. ├── MdeModulePkg                # 模块化核心包
  24. ├── MdePkg                                # 最基础的核心包,UEFI标准定义,基本数据类型和库函数
  25. ├── NetworkPkg                        # 网络协议栈
  26. ├── OvmfPkg                                # 虚拟机固件
  27. ├── PcAtChipsetPkg
  28. ├── pip-requirements.txt
  29. ├── PrmPkg
  30. ├── ReadMe.rst
  31. ├── RedfishPkg
  32. ├── SecurityPkg                        # 安全功能
  33. ├── ShellPkg                        # shell命令行界面
  34. ├── SignedCapsulePkg
  35. ├── SourceLevelDebugPkg
  36. ├── StandaloneMmPkg
  37. ├── UefiCpuPkg                        #  x86 CPU相关功能
  38. ├── UefiPayloadPkg
  39. └── UnitTestFrameworkPkg
  40. 29 directories, 8 files
复制代码
二、常用的目录文件

2.1 BaseTools--构建工具链


  • 主要的子目录
    1. BaseTools/
    2. ├── Source/
    3. │   ├── C/        # 用 C 写的底层工具(如 GenFw、GenFds)
    4. │   ├── Python/   # Python脚本,如 build.py、TargetTool.py
    5. │   └── Vfr/      # 处理 VFR (Visual Form Representation) 文件
    6. └── Scripts/
    复制代码
  • BaseTools相当于编译器+脚本+构建系统。EDk2中所有工程编译都依赖这个目录里的工具,在编译EDk2工程之前,首先就要执行make -C BaseTools。编译出的关键命令如:GenFw、GenFds、build、VfrCompile等。随后执行edksetup.sh,上面编译出的命令就会被添加到环境变量PATH中。
2.2 Conf--配置目录


  • 主要的目录文件
    1. Conf/
    2. ├── target.txt     # 构建目标(最重要!)
    3. ├── tools_def.txt  # 定义编译器工具链
    4. └── build_rule.txt # 定义构建规则
    5. # 以上文件在执行 source edksetup.sh 之后自动从 BaseTools/Conf 复制到当前的 Conf/ 目录中
    复制代码
  • Conf中最主要的文件是target.txt。它告诉编译系统使用哪个平台(.dsc),目标架构是什么,使用的编译工具链是什么,输出的目录位置等。要修改的主要参数如下:
    1. # 适用于本地x86_64的最小配置
    2. ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
    3. TARGET                = DEBUG
    4. TARGET_ARCH           = X64
    5. TOOL_CHAIN_TAG        = GCC5
    6. BUILD_RULE_CONF       = Conf/build_rule.txt
    复制代码
  • 也可以build的时候设置临时参数build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc -b DEBUG。
2.3 MdePkg--基础核心包


  • 内容
    1. Include/        # 各种 UEFI 接口头文件(例如 Uefi.h)
    2. Library/        # 各种库(如 DebugLib、BaseLib)
    3. Protocol/        # UEFI 协议定义
    复制代码
  • MdePkg相当于C标准库和操作系统内核API,提供了整个EDK2架构所需的基础定义和接口。
2.4  MdeModulePkg -- 常用模块包


  • 目录结构
    1. MdeModulePkg/
    2. ├── Application/     # 应用(比如 HelloWorld)
    3. ├── Library/
    4. ├── Universal/       # 通用驱动模块
    5. └── Bus/             # 各种总线类驱动
    复制代码
  • MdeModulePkg在MdePkg的基础上实现了很多实际可用的模块,比如,UEFI驱动(Driver),UEFI 应用(Application),常见的服务(如Variable服务、Boot Manager)。
2.5 OvmfPkg--OVMF固件工程目录

Open Virtual Machine Firmware Package

  • 目录结构
    1. OvmfPkg/
    2. ├── OvmfPkgX64.dsc   # 平台描述文件
    3. ├── OvmfPkgX64.fdf   # 镜像布局文件
    4. ├── PlatformDxe/     # 平台初始化驱动
    5. ├── Include/
    6. └── Library/
    复制代码
  • 这是用于在QEMU虚拟机上运行的完整的UEFI固件工程,支持X64、IA32平台。该虚拟平台固件实现包在编译后输出文件OVMF.fd(完整的固件镜像)和OVMF_CODE.fd / OVMF_VARS.fd分区镜像(代码和变量区分离版本)。要编译该镜像,前面我们配置了target.txt中ACTIVE_PLATFORM=OvmfPkg/OvmfPkgX64.dsc。
总结

本文只是对EDK2工程主要文件的一个大概理解,有助于建立系统性的思考,后续深入学习中会继续补充。
寄语:每天进步一点点,践踏实地!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册