2. UEFI开发环境搭建:EDK2源码获取、VS2019/VS2022安装与配置、Python与NASM工具链安装
搭建稳定、可复现的开发环境是UEFI驱动开发的第一步。本章将引导你完成EDK2源码的获取、Visual Studio编译器的安装与配置,以及Python和NASM汇编工具链的部署。所有步骤均以Windows 10/11 64位系统为基准,适用于VS2019和VS2022两个版本。
2.1 开发环境组件总览
下表列出了核心组件及其在构建流程中的角色:
| 组件 | 版本要求 | 核心作用 | 安装优先级 |
|---|---|---|---|
| EDK2源码 | edk2-stable202311 或更新 | UEFI驱动框架、库、协议定义 | 1(最后获取) |
| Visual Studio | 2019 (16.x) 或 2022 (17.x) | C/C++编译器、链接器、构建工具 | 2 |
| Python | 3.8 ~ 3.12 | EDK2构建脚本(BaseTools)运行环境 | 3 |
| NASM | 2.15.05 或更新 | 汇编语言编译(启动代码、底层操作) | 4 |
| Git | 最新稳定版 | 源码版本管理、子模块更新 | 0(最先安装) |
2.2 安装Git与配置SSH
EDK2托管在GitHub上,推荐使用Git命令行获取源码。安装Git时勾选“Git from the command line and also from 3rd-party software”和“Use Git and optional Unix tools from the Command Prompt”。
# 验证Git安装
git --version
# 配置用户名和邮箱(用于提交记录)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
2.3 安装Visual Studio 2019/2022
UEFI驱动使用C语言编写,EDK2构建系统依赖VS的C编译器(cl.exe)和链接器(link.exe)。安装时需包含“使用C++的桌面开发”工作负载,并确保勾选以下单个组件:
- Windows 10 SDK (10.0.19041.0 或更新) — 提供Windows头文件和库
- VC++ 2019/2022 v142/v143 工具集 — C编译器核心
- Windows Universal C Runtime — 运行时支持
安装完成后,打开“Developer Command Prompt for VS 2019/2022”验证编译器可用:
cl /?
link /?
EDK2构建系统通过环境变量 VS2019_PREFIX 或 VS2022_PREFIX 定位VS工具链。安装路径通常为:
- VS2019:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\ - VS2022:
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64\
2.4 安装Python与配置环境变量
EDK2的BaseTools(构建工具集)使用Python编写。安装Python时务必勾选“Add Python to PATH”。
# 验证Python安装
python --version
# 验证pip包管理器
pip --version
EDK2需要 pip 安装以下依赖包:
pip install --upgrade pip
pip install edk2-pytool-library
pip install edk2-pytool-extensions
pip install antlr4-python3-runtime
2.5 安装NASM汇编器
UEFI启动代码和部分底层驱动包含汇编语言文件(.asm、.nasm),需要NASM编译。从NASM官网下载Windows安装包,安装后手动将NASM路径加入系统PATH环境变量。
# 验证NASM安装
nasm --version
典型安装路径:C:\Program Files\NASM\。添加PATH后需重启终端或命令行窗口。
2.6 获取EDK2源码
完成所有工具链安装后,使用Git克隆EDK2主仓库及其子模块。推荐使用 --recursive 参数一次性获取所有子模块。
# 创建工作目录
mkdir C:\uefi_workspace
cd C:\uefi_workspace
# 克隆EDK2稳定版(以edk2-stable202311为例)
git clone https://github.com/tianocore/edk2.git --branch edk2-stable202311 --recursive
# 如果克隆时未加--recursive,可后续更新子模块
cd edk2
git submodule update --init --recursive
克隆完成后,目录结构应包含以下关键子目录:
- MdePkg/ — UEFI规范定义的协议、PPI、GUID等头文件
- MdeModulePkg/ — 核心模块实现(如Boot Manager、Variable Services)
- UefiDriverWizard/ — 驱动开发向导工具(可选)
- BaseTools/ — 构建工具(Python脚本 + C可执行文件)
- Conf/ — 构建配置文件(target.txt、tools_def.txt等)
2.7 构建环境验证:编译EDK2基础包
环境搭建完成后,通过编译一个最小的UEFI应用程序(如HelloWorld)来验证所有工具链是否正常工作。
# 设置EDK2环境变量(每次打开新终端都需要执行)
cd C:\uefi_workspace\edk2
edksetup.bat
# 编译BaseTools(首次构建必须)
build -p MdePkg\MdePkg.dsc -a X64 -t VS2022 -b DEBUG
# 编译HelloWorld示例
build -p MdeModulePkg\MdeModulePkg.dsc -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf -a X64 -t VS2022 -b DEBUG
编译成功后,会在 Build\MdeModulePkg\DEBUG_VS2022\X64\ 目录下生成 HelloWorld.efi 文件。该文件可直接在UEFI Shell中运行。
- “cl.exe not found” — 未在VS开发命令提示符中运行,或VS安装不完整。
- “nasm not found” — NASM未加入PATH,或PATH未刷新。
- “Python module not found” — 缺少edk2-pytool-library,执行pip install。
- “子模块缺失” — 执行
git submodule update --init --recursive。
2.8 环境结构关系图
下图展示了各组件在UEFI驱动构建流程中的层级关系与数据流向:
2.9 环境变量与路径配置清单
为确保构建系统能正确找到所有工具,建议将以下路径加入系统环境变量(以VS2022为例):
| 环境变量 | 典型值 | 说明 |
|---|---|---|
PYTHON_HOME |
C:\Python311 |
Python安装根目录 |
NASM_PREFIX |
C:\Program Files\NASM\ |
NASM安装目录(末尾带反斜杠) |
VS2022_PREFIX |
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64\ |
VS编译器bin目录 |
WORKSPACE |
C:\uefi_workspace\edk2 |
EDK2源码根目录(edksetup.bat自动设置) |
PATH |
追加 %PYTHON_HOME%;%NASM_PREFIX%;%VS2022_PREFIX% |
确保命令行可直接调用工具 |
2.10 多版本VS共存与切换
如果同时安装了VS2019和VS2022,EDK2通过 Conf/tools_def.txt 中的 TOOL_CHAIN_TAG 选择编译器。构建时使用 -t 参数指定:
# 使用VS2019构建
build -p MdePkg\MdePkg.dsc -a X64 -t VS2019 -b DEBUG
# 使用VS2022构建
build -p MdePkg\MdePkg.dsc -a X64 -t VS2022 -b DEBUG
edksetup.bat会自动检测系统中已安装的VS版本,并设置对应的环境变量。如果检测失败,可手动执行对应版本的开发命令提示符后再运行edksetup.bat。
2.11 常见问题与解决方案
- 问题:edksetup.bat报错“无法找到VS工具链”
解决:确保在“Developer Command Prompt for VS”中运行,或手动设置VS2022_PREFIX环境变量指向正确的编译器路径。 - 问题:子模块下载失败(SSL证书错误)
解决:执行git config --global http.sslVerify false(仅限测试环境),或配置Git使用代理。 - 问题:Python脚本执行报错“ModuleNotFoundError: No module named 'edk2'”
解决:执行pip install edk2-pytool-library edk2-pytool-extensions,并确保Python版本在3.8~3.12之间。 - 问题:NASM编译.asm文件时报错“unrecognized option”
解决:检查NASM版本是否过旧,更新至2.15.05或更高版本。
- Git已安装并可正常克隆仓库
- Visual Studio已安装,cl.exe可正常调用
- Python 3.8~3.12已安装,pip可用
- NASM已安装并加入PATH
- EDK2源码已完整克隆(含子模块)
- BaseTools编译成功(build -p MdePkg\MdePkg.dsc)
- HelloWorld示例编译成功,生成.efi文件
完成以上所有步骤后,你的开发环境已具备编写和编译UEFI驱动的基本能力。下一阶段将深入EDK2的包结构、模块类型和INF文件格式,为编写第一个UEFI驱动做好准备。