2. EDK II 开发环境搭建:Windows/Linux下安装VS、Python、NASM、Git、EDK II源码克隆、环境变量配置
搭建稳定、一致的开发环境是进入EDK II世界的第一步。本章将指导你在Windows和Linux两大主流操作系统上,完成从基础工具链安装到EDK II源码克隆、环境变量配置的全流程。请严格按照版本要求操作,避免因工具版本不匹配导致的编译失败。
2.1 工具链概览与版本要求
EDK II对编译工具链有严格的版本依赖。下表列出了核心组件的推荐版本及用途:
| 组件 | 推荐版本 | 用途 | Windows | Linux |
|---|---|---|---|---|
| Visual Studio | VS 2019 / 2022 | C 编译器、链接器、NMAKE | 必需 | 不适用 |
| Python | 3.8 ~ 3.12 | 构建脚本(BaseTools)、环境管理 | 必需 | 必需 |
| NASM | 2.15.05+ | 汇编器(X64/IA32 汇编代码) | 必需 | 必需 |
| Git | 2.30+ | 源码版本控制、克隆 EDK II 仓库 | 必需 | 必需 |
| OpenSSL | 1.1.1 或 3.x | 加密库(可选,用于安全启动) | 可选 | 可选 |
版本兼容性提示: 建议优先使用 VS 2022 Community 版(免费)和 Python 3.10。Python 3.13 及以上版本可能因移除了部分标准库导致 BaseTools 脚本报错,请谨慎升级。
2.2 Windows 环境搭建
2.2.1 安装 Visual Studio
- 访问 Visual Studio 官网,下载 Community 2022 安装程序。
- 运行安装程序,在“工作负载”选项卡中勾选 “使用 C++ 的桌面开发”。
- 在右侧“安装详细信息”中,确保包含 “Windows 10/11 SDK” 和 “适用于最新 v143 生成工具的 C++ ATL”。
- 点击“安装”,等待完成(约需 10-20 分钟,取决于网络速度)。
- 安装完成后,重启系统以确保环境变量生效。
2.2.2 安装 Python
- 从 Python 官网 下载 Python 3.10.x Windows 安装包(64位)。
- 安装时 务必勾选
“Add Python to PATH”。 - 选择 “Customize installation”,确保所有可选功能(pip、py launcher)均被勾选。
- 安装完成后,打开命令提示符验证:
python --version应显示Python 3.10.x。
2.2.3 安装 NASM
- 从 NASM 官网 下载 Windows 安装包(通常为
nasm-2.16.01-installer-x64.exe)。 - 运行安装程序,安装路径建议保持默认
C:\Program Files\NASM。 - 安装程序会自动将 NASM 添加到系统 PATH。若未自动添加,请手动将
C:\Program Files\NASM加入环境变量。 - 验证:打开新命令提示符,输入
nasm --version。
2.2.4 安装 Git
- 从 Git 官网 下载 Windows 版 Git 安装程序。
- 安装过程中,建议选择 “Git from the command line and also from 3rd-party software”。
- 选择 “Use Visual Studio Code as Git’s default editor”(若已安装 VS Code)。
- 行结束符转换选择 “Checkout as-is, commit as-is”(避免 CRLF/LF 转换问题)。
- 验证:
git --version。
2.3 Linux 环境搭建(以 Ubuntu 22.04 LTS 为例)
Linux 环境通常使用系统包管理器安装工具链,更为简洁。
2.3.1 安装编译工具链
# 更新包索引
sudo apt update
# 安装 GCC、G++、Make、uuid-dev 等基础工具
sudo apt install -y build-essential uuid-dev
# 安装 Python 3.10 及 pip
sudo apt install -y python3 python3-pip
# 安装 NASM
sudo apt install -y nasm
# 安装 Git
sudo apt install -y git
2.3.2 验证安装
gcc --version
python3 --version
nasm --version
git --version
Linux 特别说明: 某些发行版默认的 Python 版本可能为 3.12 或更高。若遇到 BaseTools 兼容性问题,建议使用
python3.10 或通过 update-alternatives 切换默认 Python 版本。
2.4 克隆 EDK II 源码
EDK II 官方主仓库托管在 GitHub 上。我们推荐克隆稳定分支 edk2-stable,而非主分支 master,以获得更稳定的构建体验。
# 创建工作目录(建议路径不含空格和中文)
mkdir -p ~/workspace/edk2
cd ~/workspace/edk2
# 克隆 EDK II 稳定分支(以 edk2-stable202405 为例)
git clone https://github.com/tianocore/edk2.git -b edk2-stable202405
# 进入 edk2 目录
cd edk2
# 初始化子模块(必须执行,否则编译会缺少依赖)
git submodule update --init --recursive
子模块初始化失败? 若网络不稳定导致子模块克隆超时,可尝试设置 Git 代理,或使用国内镜像源(如 Gitee 上的 EDK2 镜像)。子模块未完全初始化是编译失败最常见的原因之一。
2.5 环境变量配置
EDK II 使用 edksetup.bat(Windows)或 edksetup.sh(Linux)脚本自动配置环境变量。该脚本会设置 WORKSPACE、EDK_TOOLS_PATH、PACKAGES_PATH 等关键变量,并将 BaseTools 编译工具加入 PATH。
2.5.1 Windows 环境变量配置
- 打开 “x64 Native Tools Command Prompt for VS 2022”(开始菜单中搜索)。
- 切换到 EDK II 源码目录:
cd C:\path\to\edk2 - 执行环境配置脚本:
edksetup.bat - 验证环境变量:
echo %WORKSPACE%应显示 EDK II 根目录路径。
2.5.2 Linux 环境变量配置
# 进入 EDK II 目录
cd ~/workspace/edk2/edk2
# 执行环境配置脚本
source edksetup.sh
# 验证环境变量
echo $WORKSPACE
持久化配置: 为避免每次打开终端都执行
source edksetup.sh,可将该命令添加到 ~/.bashrc 或 ~/.zshrc 文件中:echo "source ~/workspace/edk2/edk2/edksetup.sh" >> ~/.bashrc
2.6 环境搭建验证:编译 BaseTools
环境变量配置完成后,建议立即编译 BaseTools,以验证工具链是否正常工作。
# 在 EDK2 根目录下执行
make -C BaseTools
# 编译成功后,BaseTools/Source/C/bin 目录下会生成可执行文件
若编译过程中出现错误,请检查以下常见问题:
- Python 版本不匹配: 确保 Python 3 为默认版本,且 pip 已安装。
- NASM 未找到: 检查 NASM 是否在 PATH 中。
- uuid-dev 缺失(Linux): 安装
uuid-dev包。 - VS 环境未激活(Windows): 务必使用 x64 Native Tools Command Prompt,而非普通 CMD。
2.7 开发环境架构总览
下图展示了 EDK II 开发环境的整体架构,以及各工具之间的调用关系:
2.8 常见问题与避坑指南
| 问题现象 | 根本原因 | 解决方案 |
|---|---|---|
Python 命令找不到 |
Python 未加入 PATH | 重新安装并勾选“Add to PATH”,或手动添加 Python 安装目录到系统环境变量 |
nasm: command not found |
NASM 未安装或 PATH 未配置 | Linux 执行 sudo apt install nasm;Windows 检查 PATH 是否包含 NASM 安装目录 |
make: command not found |
Linux 缺少 build-essential | sudo apt install build-essential |
uuid.h: No such file or directory |
Linux 缺少 uuid-dev 库 | sudo apt install uuid-dev |
LINK : fatal error LNK1104: cannot open file 'uuid.lib' |
Windows SDK 未正确安装 | 重新运行 VS 安装程序,确保“Windows 10/11 SDK”已勾选 |
Submodule 'xxx' not initialized |
未执行 git submodule update |
在 EDK2 根目录执行 git submodule update --init --recursive |
最佳实践: 建议在搭建环境后,立即编译 EDK II 自带的
MdeModulePkg 或 MdePkg 中的示例模块(如 HelloWorld),以端到端验证整个工具链是否正常工作。这是避免后续开发中“环境问题”与“代码问题”混淆的关键一步。