1. 搭建EDK II开发环境
任务目标
在Ubuntu系统上完成EDK II开发环境搭建,包括安装必要工具链、获取EDK II源码、配置环境变量,并编译通过一个最小固件项目(MdePkg中的HelloWorld示例),以验证环境可用。
环境准备
本案例基于 Ubuntu 22.04 LTS(64位),需具备sudo权限。EDK II官方支持GCC 5及以上版本,Ubuntu 22.04默认的GCC 11可直接使用。
安装依赖工具链
执行以下命令安装编译EDK II所需的系统包:
sudo apt update
sudo apt install -y build-essential git uuid-dev nasm python3 python3-distutils
其中nasm用于汇编编译,uuid-dev提供UUID库头文件,python3为EDK II构建脚本所需。
获取EDK II源码并配置环境
克隆EDK II稳定分支(当前推荐edk2-stable202405),并初始化子模块:
cd ~
git clone https://github.com/tianocore/edk2.git -b edk2-stable202405
cd edk2
git submodule update --init --recursive
子模块包含BaseTools依赖的第三方库(如optparse等),必须完整拉取。
配置环境变量。将以下内容追加到~/.bashrc:
export EDK_TOOLS_PATH=~/edk2/BaseTools
export PATH=$PATH:$EDK_TOOLS_PATH/Bin/Linux-x86_64
export WORKSPACE=~/edk2
export PACKAGES_PATH=$WORKSPACE
执行source ~/.bashrc使配置生效。注意:每次打开新终端或切换工作目录后,需重新source ~/.bashrc或手动执行上述export命令。
编译BaseTools
EDK II构建系统依赖BaseTools提供的编译工具,需先编译生成:
cd ~/edk2
make -C BaseTools
编译完成后,验证工具是否可用:
which build
which GenFv
若两条命令均返回路径,说明BaseTools安装成功。
编译最小固件项目
EDK II自带HelloWorld示例(位于MdeModulePkg/Application/HelloWorld),可作为最小验证项目。执行以下命令编译:
cd ~/edk2
source edksetup.sh
build -p MdeModulePkg/MdeModulePkg.dsc -m MdeModulePkg/Application/HelloWorld/HelloWorld.inf -a X64 -t GCC5
参数说明:-p指定包描述文件,-m指定模块INF文件,-a指定架构(X64),-t指定工具链标签(GCC5对应GCC编译器)。
验证方法
编译成功后,在Build/MdeModule/DEBUG_GCC5/X64/目录下生成HelloWorld.efi文件。执行以下命令确认文件存在且非空:
ls -l ~/edk2/Build/MdeModule/DEBUG_GCC5/X64/HelloWorld.efi
若文件大小大于0且无编译错误信息,则环境搭建成功。该.efi文件可在UEFI Shell中直接运行,输出Hello World字符串。
常见问题
- Python版本不兼容:EDK II构建脚本依赖Python 3.6+,若系统默认Python版本过低,需安装
python3并确保python3 --version输出3.6以上。 - 子模块拉取失败:网络原因可能导致
git submodule update中断,可重试该命令或使用--depth 1浅克隆子模块。 - GCC版本警告:若使用GCC 12+,编译时可能出现
mismatched-new-delete警告,不影响生成.efi文件,可忽略。