2. 编译默认配置的Coreboot
任务目标
从Coreboot源码构建一个默认配置的、可启动的固件镜像(build/coreboot.rom),验证交叉编译工具链与构建环境可用。本案例使用QEMU模拟器作为目标平台,无需真实硬件即可完成完整构建与启动验证。
环境准备
需要一台Linux主机(推荐Ubuntu 22.04+),安装以下依赖:
sudo apt-get install -y git build-essential flex bison libncurses-dev \
libssl-dev libelf-dev python3-pip zlib1g-dev
Coreboot源码仓库:
git clone https://review.coreboot.org/coreboot.git
cd coreboot
建议使用稳定分支(当前为4.22或更新):
git checkout 4.22
构建步骤
Coreboot使用make menuconfig进行配置。为QEMU构建默认配置的最小镜像,执行以下命令:
make menuconfig
在菜单中依次设置:
- Mainboard → Mainboard vendor →
Emulation - Mainboard model →
QEMU x86 i440fx/piix4 - Chipset → 保持默认(Intel i440fx)
- Devices → 保持默认
- Payload → 选择
SeaBIOS(若未自动选中,手动添加)
保存并退出。随后执行构建:
make -j$(nproc)
首次构建会自动下载并编译交叉编译器(i386-elf),耗时约10~20分钟。构建完成后,产物位于:
build/coreboot.rom
验证方法
使用QEMU启动生成的镜像,观察是否进入SeaBIOS界面:
qemu-system-x86_64 -bios build/coreboot.rom -m 256M -serial stdio
通过条件:QEMU窗口出现SeaBIOS版本信息,串口输出包含Booting from ROM...或进入启动菜单,且无FATAL/ERROR字样。
常见问题
- 构建报错
flex: command not found:未安装依赖,执行环境准备中的apt命令。 - menuconfig中找不到QEMU选项:确认源码版本为4.22+,旧版本路径可能为
Mainboard → Emulation → QEMU i440fx。 - 构建中断于下载工具链:网络问题,可手动执行
make crossgcc-i386重试。
核心构建流程
下图展示了Coreboot从源码到最终ROM镜像的构建流水线,帮助理解各阶段产物:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 源码树 │───▶│ 配置阶段 │───▶│ 编译阶段 │───▶│ 链接打包 │
│ coreboot/ │ │ .config │ │ build/*.o│ │ coreboot │
└──────────┘ └──────────┘ └──────────┘ │ .rom │
└──────────┘
▲ ▲ ▲ ▲
│ │ │ │
git checkout make menuconfig make -jN QEMU验证
配置阶段生成.config文件,编译阶段将C代码与汇编交叉编译为对象文件,最终由build/目录下的脚本链接生成包含bootblock、romstage、ramstage和payload的完整固件镜像。
关键文件说明
build/coreboot.rom:最终固件镜像,可直接烧录或用于QEMU。.config:当前构建配置,可备份用于复现。build/:构建中间产物目录,删除后可重新构建。
本案例验证了Coreboot构建链路的完整性。后续案例将在此镜像基础上添加自定义驱动或修改启动流程。