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 新版本已支持自动检测。