2. EDK2 开发环境搭建:源码获取、编译器配置与模拟器运行
搭建一个稳定、可复现的 EDK2 开发环境是 UEFI 协议开发的第一步。本章将引导你完成从源码拉取、工具链安装到模拟器验证的全流程,确保你拥有一个可直接编译并运行 UEFI 应用程序的本地环境。
2.1 环境概览与版本选择
EDK2 支持 Windows、Linux 和 macOS 三大主流平台。在 Windows 环境下,推荐使用 VS2019 或 VS2022 作为 C 编译器,配合 Python 3.x 和 Git 完成构建。下表列出了核心组件的推荐版本与作用:
| 组件 | 推荐版本 | 核心作用 |
|---|---|---|
| 操作系统 | Windows 10/11 (64-bit) | 提供基础运行环境 |
| EDK2 源码 | edk2-stable202311 或最新 master | UEFI 固件开发框架与协议实现 |
| Visual Studio | VS2019 (16.x) 或 VS2022 (17.x) | C 编译器、链接器与标准库 |
| Python | Python 3.8 ~ 3.12 | 构建脚本 (BaseTools) 运行环境 |
| Git | Git 2.30+ | 源码版本管理与子模块同步 |
| NASM | 2.15+ | 汇编器,用于编译汇编语言模块 |
edk2-stable202311 标签版本。该版本与 VS2019/VS2022 及 Python 3.10 有良好的兼容性验证。
2.2 获取 EDK2 源码
EDK2 项目托管在 GitHub,采用子模块 (submodule) 管理依赖包。正确的拉取方式必须包含 --recursive 参数,以确保同步 MdeModulePkg、MdePkg、BaseTools 等核心子仓库。
# 1. 创建本地工作目录
mkdir C:\UEFI_Workspace
cd C:\UEFI_Workspace
# 2. 克隆 EDK2 主仓库(包含所有子模块)
git clone --recursive https://github.com/tianocore/edk2.git
# 3. 进入 edk2 目录
cd edk2
# 4. (可选)切换到稳定标签
git checkout edk2-stable202311
# 5. 更新子模块(如果之前未使用 --recursive)
git submodule update --init --recursive
BaseTools 时会报错。
2.3 安装编译工具链
EDK2 在 Windows 下的标准工具链是 VS2019/VS2022 + NASM + Python。以下为详细安装与配置步骤:
- 安装 Visual Studio:安装 VS2019 或 VS2022 时,务必勾选“使用 C++ 的桌面开发”工作负载,并确保包含 Windows 10 SDK (或 11 SDK)。
- 安装 Python:从 python.org 下载安装包,安装时勾选“Add Python to PATH”。
- 安装 NASM:从 nasm.us 下载 Windows 安装包,安装后手动将
C:\NASM添加到系统PATH环境变量。 - 配置 EDK2 环境变量:打开“x64 Native Tools Command Prompt for VS 2019/2022”,执行以下命令设置 EDK2 构建环境:
# 在 VS 开发者命令提示符中执行
cd C:\UEFI_Workspace\edk2
# 设置 EDK2 环境变量(必须每次在新终端中执行)
edksetup.bat
# 验证环境:显示当前工具链配置
build -h
edksetup.bat 后,控制台应输出 Loading previous configuration from ... 且无错误。若提示 Python not found,请检查 Python 是否在 PATH 中。
2.4 编译 EmulatorPkg 模拟器
EmulatorPkg 是 EDK2 提供的一个特殊平台包,它将 UEFI 固件编译为 Windows 原生可执行文件 (.exe),无需真实硬件即可运行 UEFI Shell 和应用程序。这是学习和调试 UEFI 协议的最佳起点。
编译 EmulatorPkg 的完整流程如下:
# 1. 确保在 VS 开发者命令提示符中,且已执行 edksetup.bat
cd C:\UEFI_Workspace\edk2
# 2. 编译 EmulatorPkg(Debug 模式,VS2019/VS2022 工具链)
build -p EmulatorPkg\EmulatorPkg.dsc -a X64 -t VS2019 -b DEBUG
# 3. 编译成功后,运行模拟器
# 输出文件位于 Build\EmulatorX64\DEBUG_VS2019\X64\WinHost.exe
Build\EmulatorX64\DEBUG_VS2019\X64\WinHost.exe
-p 指定平台描述文件 (DSC),-a 指定架构 (X64),-t 指定工具链 (VS2019 或 VS2022),-b 指定构建类型 (DEBUG/RELEASE)。若使用 VS2022,将 -t VS2019 改为 -t VS2022。
首次编译 EmulatorPkg 时,EDK2 会自动编译 BaseTools(Python 和 C 混合的构建工具集)。编译时间取决于机器性能,通常需要 5~15 分钟。编译成功后,你将看到 WinHost.exe 窗口启动,并进入 UEFI Shell 界面。
2.5 验证环境:运行 UEFI Shell
当 WinHost.exe 成功启动后,你将看到类似下图的 UEFI Shell 界面。在 Shell 提示符 Shell> 下输入以下命令,验证环境是否正常工作:
# 查看当前文件系统
Shell> map
# 查看 UEFI 版本信息
Shell> ver
# 退出 Shell 并关闭模拟器
Shell> reset
如果 map 命令能列出文件系统映射,ver 命令能显示 UEFI 规范版本号 (如 2.10),则说明你的 EDK2 开发环境已完全搭建成功,可以开始编写和调试 UEFI 应用程序了。
- 编译错误: 检查是否在 VS 开发者命令提示符中执行,而非普通 CMD。
- NASM 未找到: 确认
nasm.exe所在目录已添加到系统 PATH,并重启终端。 - Python 模块缺失: 执行
pip install --upgrade -r BaseTools/requirements.txt安装依赖。 - 模拟器闪退: 检查 Windows 防火墙是否阻止了
WinHost.exe,或尝试以管理员身份运行。
2.6 本章小结
通过本章的学习,你已完成以下关键任务:
- 从 GitHub 获取 EDK2 完整源码(含子模块)。
- 安装并配置 VS2019/VS2022、Python 3.x 和 NASM 编译工具链。
- 执行
edksetup.bat初始化 EDK2 构建环境。 - 成功编译并运行 EmulatorPkg 模拟器,进入 UEFI Shell。