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。