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文件,可忽略。