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

在菜单中依次设置:

  1. Mainboard → Mainboard vendor → Emulation
  2. Mainboard model → QEMU x86 i440fx/piix4
  3. Chipset → 保持默认(Intel i440fx)
  4. Devices → 保持默认
  5. 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构建链路的完整性。后续案例将在此镜像基础上添加自定义驱动或修改启动流程。