2. UEFI开发环境搭建:EDK2源码获取、VS2019/VS2022安装与配置、Python与NASM工具链安装

搭建稳定、可复现的开发环境是UEFI驱动开发的第一步。本章将引导你完成EDK2源码的获取、Visual Studio编译器的安装与配置,以及Python和NASM汇编工具链的部署。所有步骤均以Windows 10/11 64位系统为基准,适用于VS2019和VS2022两个版本。

环境概览:UEFI驱动开发依赖EDK2框架、C编译器(VS)、汇编器(NASM)和脚本语言(Python)。四者缺一不可,建议按顺序安装。

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"
网络提示:如果直接访问GitHub不稳定,建议提前配置Git代理或使用国内镜像仓库。EDK2仓库包含大量子模块,网络中断会导致获取不完整。

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\
版本选择建议:VS2022对C11/C17标准支持更好,且构建速度有优化。如果团队统一使用VS2019,则保持一致性。EDK2官方对两个版本均提供完整支持。

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
Python版本限制:EDK2的BaseTools在Python 3.13上可能存在兼容性问题,建议使用3.10或3.11。如果系统安装了多个Python版本,确保默认python命令指向正确的解释器。

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驱动构建流程中的层级关系与数据流向:

UEFI开发环境组件关系图 UEFI驱动开发环境组件关系 EDK2 源码仓库 构建描述文件 (.dsc / .inf / .fdf) Visual Studio 编译器 NASM 汇编器 Python 构建脚本 EDK2 Build 引擎 (build.exe) UEFI 驱动 (.efi) / 固件卷 (.fv) 说明:EDK2构建引擎读取描述文件,调用VS编译器、NASM汇编器和Python脚本,最终生成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% 确保命令行可直接调用工具
环境变量持久化:通过“系统属性 → 高级 → 环境变量”添加上述变量,避免每次打开终端都手动设置。edksetup.bat会自动检测VS版本并设置临时环境,但NASM和Python路径仍需在系统变量中配置。

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或更高版本。
环境搭建检查清单:
  1. Git已安装并可正常克隆仓库
  2. Visual Studio已安装,cl.exe可正常调用
  3. Python 3.8~3.12已安装,pip可用
  4. NASM已安装并加入PATH
  5. EDK2源码已完整克隆(含子模块)
  6. BaseTools编译成功(build -p MdePkg\MdePkg.dsc)
  7. HelloWorld示例编译成功,生成.efi文件

完成以上所有步骤后,你的开发环境已具备编写和编译UEFI驱动的基本能力。下一阶段将深入EDK2的包结构、模块类型和INF文件格式,为编写第一个UEFI驱动做好准备。