1. 搭建BIOS开发环境

任务目标

本案例要求在一台干净的 Ubuntu 22.04 LTS 系统上,从零搭建 EDK2 固件开发环境,安装必要的工具链与依赖,并最终编译通过一个最小固件工程(EmulatorPkg 或 OvmfPkg 的编译验证),以证明环境可用。

环境与依赖清单

以下依赖为 EDK2 编译所必需,缺失任一将导致编译失败。请逐项确认安装:

  • 基础工具:build-essential(gcc/make)、git、uuid-dev、iasl(ACPI 编译器)
  • Python 环境:python3、python3-distutils(EDK2 构建脚本依赖)
  • Nasm 汇编器:EDK2 中部分模块(如 BaseLib)需要 nasm 编译
  • 其他库:libssl-dev(OvmfPkg 需要)、bison、flex(EDK2 工具链生成需要)

安装命令

sudo apt update
sudo apt install -y build-essential git uuid-dev iasl python3 python3-distutils nasm libssl-dev bison flex

获取 EDK2 源码并配置环境

EDK2 使用子模块管理大量依赖包,必须完整拉取子模块才能编译。以下命令将源码克隆至 ~/edk2 目录:

cd ~
git clone https://github.com/tianocore/edk2.git
cd edk2
git submodule update --init --recursive

子模块拉取完成后,需要设置 EDK2 的环境变量。每次打开新终端编译前都需要执行:

cd ~/edk2
make -C BaseTools
source edksetup.sh

其中 make -C BaseTools 编译 EDK2 的基础工具(如 GenFv、GenFds 等),edksetup.sh 设置编译所需的环境变量。

编译验证(OvmfPkg)

OvmfPkg 是 EDK2 官方的 QEMU 虚拟机固件工程,编译它可完整验证工具链、库函数和构建系统是否正常。执行以下命令:

cd ~/edk2
source edksetup.sh
build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t GCC5 -b DEBUG

参数说明:-p 指定平台描述文件,-a 指定架构,-t 指定工具链(GCC5 对应 gcc 9/10/11),-b 指定构建类型。

验证方法与通过标准

编译过程需要 10~20 分钟(取决于机器性能)。当终端出现以下输出时,表示编译成功:

- Done -

同时,在 ~/edk2/Build/OvmfX64/DEBUG_GCC5/FV/ 目录下应生成 OVMF.fd 文件(约 4MB)。该文件即为可启动的固件镜像,可用 QEMU 加载验证:

qemu-system-x86_64 -bios ~/edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -m 1024

若 QEMU 窗口出现 TianoCore Logo 并进入 UEFI Shell,则证明编译产物可运行,环境搭建完全成功。

常见问题排查

  • nasm 版本过低:EDK2 要求 nasm ≥ 2.15,若 Ubuntu 仓库版本过低,需从 nasm.us 下载源码手动编译安装。
  • Python 路径错误:若提示找不到 python,执行 sudo ln -s /usr/bin/python3 /usr/bin/python 建立软链接。
  • 子模块拉取失败:网络原因可能导致子模块不完整,可重复执行 git submodule update --init --recursive 直至无报错。
  • GCC 版本不匹配:若使用 GCC 12+,需将 -t GCC5 改为 -t GCC,EDK2 新版本已支持自动检测。