3. 添加自定义主板支持
任务说明
本案例以一块虚拟主板 vlab-qemu 为目标,在 Coreboot 源码树中为其添加基本的设备树(devicetree)与 Kconfig 配置,使 Coreboot 在编译时能够识别该主板并生成对应的 config 与 static.c 设备初始化代码。完成后通过 make menuconfig 选择该主板并成功编译,即可验证主板支持已生效。
环境与前置条件
- Coreboot 源码(版本 ≥ 4.11),已安装构建依赖(gcc、make、flex、bison、libncurses-dev 等)
- 本案例基于 QEMU 虚拟环境,无需真实硬件;使用默认的
qemu-i440fx作为芯片组参考
实现步骤
在 Coreboot 源码根目录下依次创建以下文件。主板目录结构遵循 Coreboot 标准布局:src/mainboard/vendor/boardname/。
1. 创建主板目录与 Kconfig
mkdir -p src/mainboard/vlab/qemu
创建 src/mainboard/vlab/qemu/Kconfig:
config BOARD_VLAB_QEMU
bool "VLab QEMU Virtual Board"
select SOC_INTEL_I440FX
select NORTHBRIDGE_INTEL_I440LX
select SOUTHBRIDGE_INTEL_I82371EB
select SUPERIO_NONE
select HAVE_ACPI_TABLES
select HAVE_OPTION_TABLE
select HAVE_PIRQ_TABLE
config MAINBOARD_DIR
string
default "vlab/qemu"
config MAINBOARD_PART_NUMBER
string
default "VLab-QEMU"
config MAINBOARD_VENDOR
string
default "VLab"
config MAINBOARD_FAMILY
string
default "Virtual"
config MAX_CPUS
int
default 1
config VGA_BIOS
bool
default n
2. 创建设备树 devicetree.cb
创建 src/mainboard/vlab/qemu/devicetree.cb,描述虚拟主板的设备拓扑:
chip northbridge/intel/i440lx
device cpu_cluster 0 on end
device pci_domain 0 on
chip southbridge/intel/i82371eb
device pci 00.0 on end # Host bridge
device pci 01.0 on end # ISA bridge
device pci 01.1 on end # IDE controller
device pci 01.2 on end # USB controller
device pci 01.3 on end # Power management
end
end
end
3. 创建 Kconfig.name 与 board_info.txt
创建 src/mainboard/vlab/qemu/Kconfig.name:
config BOARD_VLAB_QEMU
bool
创建 src/mainboard/vlab/qemu/board_info.txt:
Category: virtual
Board URL: https://example.com/vlab-qemu
ROM package: qemu
4. 创建最小 romstage 入口
创建 src/mainboard/vlab/qemu/romstage.c,提供最基本的初始化入口:
#include <arch/io.h>
#include <device/pci_ops.h>
#include <console/console.h>
void mainboard_romstage_entry(void)
{
/* 虚拟主板无需实际硬件初始化,仅确认入口被调用 */
printk(BIOS_INFO, "VLab-QEMU: romstage entry\n");
}
5. 创建 Kconfig 主菜单关联
编辑 src/mainboard/Kconfig,在末尾添加:
source "src/mainboard/vlab/Kconfig"
创建 src/mainboard/vlab/Kconfig:
config VENDOR_VLAB
bool "VLab"
select HAVE_MAINBOARD_RESOURCES
source "src/mainboard/vlab/*/Kconfig.name"
构建与验证
# 在 Coreboot 根目录执行
make menuconfig
# 进入 Mainboard -> Mainboard vendor 选择 VLab
# 进入 Mainboard -> Mainboard model 选择 VLab QEMU Virtual Board
# 保存退出
# 开始编译
make -j$(nproc)
验证通过条件:
make menuconfig中能够看到并选择VLab厂商及VLab QEMU Virtual Board型号;- 编译无错误结束,生成
build/coreboot.rom文件; - 检查
build/mainboard/vlab/qemu/static.c存在,且内容包含 devicetree.cb 中定义的设备节点(如pci_domain、cpu_cluster等),说明设备树已被正确解析并生成初始化代码。
常见问题
- menuconfig 中看不到新主板:确认
src/mainboard/Kconfig中 source 路径正确,且Kconfig.name文件存在。 - 编译报错缺少 romstage 入口:检查
romstage.c中函数名是否为mainboard_romstage_entry,且已包含必要的头文件。 - 设备树语法错误:运行
make devicetree可单独验证 devicetree.cb 语法是否正确。