1. 搭建BIOS开发环境

任务目标

本案例完成BIOS固件开发的最小可复现环境搭建:在Ubuntu 22.04主机上安装交叉编译工具链、QEMU模拟器及EDK II基础框架,并编译生成一个可启动的OVMF固件镜像,最终通过QEMU验证镜像能够正常引导至UEFI Shell。

环境依赖

  • 主机系统:Ubuntu 22.04 x86_64(其他Linux发行版需调整包管理器命令)
  • 磁盘空间:至少2GB可用空间(用于源码与编译产物)
  • 网络连接:需访问Github与Ubuntu软件源

环境安装

执行以下命令安装必要工具链与依赖包:

sudo apt update
sudo apt install -y build-essential git uuid-dev nasm python3 python3-distutils
# QEMU(用于运行验证)
sudo apt install -y qemu-system-x86
# 交叉编译64位UEFI固件所需工具
sudo apt install -y gcc-aarch64-linux-gnu

获取EDK II源码并配置环境

# 克隆EDK II稳定分支(约200MB)
git clone --branch edk2-stable202311 --depth 1 https://github.com/tianocore/edk2.git
cd edk2

# 初始化子模块(包含CryptoPkg等依赖)
git submodule update --init --recursive

# 设置编译环境变量
make -C BaseTools
source edksetup.sh

编译OVMF固件

OVMF(Open Virtual Machine Firmware)是基于EDK II的UEFI固件实现,可直接作为BIOS替代品在QEMU中运行。修改Conf/target.txt中的以下配置:

ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
TARGET                = RELEASE
TARGET_ARCH           = X64
TOOL_CHAIN_TAG        = GCC5

执行编译(首次编译约需10-15分钟):

build

编译完成后,固件镜像位于:Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd

运行验证

使用QEMU启动编译生成的固件镜像,验证其能够引导至UEFI Shell:

# 创建UEFI Shell运行所需的变量存储文件(首次运行自动生成)
qemu-system-x86_64 \
  -drive if=pflash,format=raw,readonly=on,file=Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd \
  -drive if=pflash,format=raw,file=./ovmf_vars.fd \
  -nographic

其中ovmf_vars.fd为可写变量存储文件,首次运行前需创建(大小与OVMF.fd相同,可用cp OVMF.fd ovmf_vars.fd生成)。

通过判定标准

QEMU窗口或串口终端出现UEFI交互界面,并显示Shell>提示符,说明固件编译成功且能够正常引导。在Shell提示符下输入ver命令,若返回EDK II版本信息(如UEFI v2.7 (EDK II, 0x00010000)),则环境搭建完全通过验证。

常见问题

  • 编译报错找不到GCC5工具链:确认已执行source edksetup.sh且当前目录为edk2根目录。
  • QEMU启动黑屏无输出:确认-nographic参数已添加,且OVMF.fd路径正确。
  • 子模块更新失败:网络问题导致,可重试git submodule update --init --recursive。