4. 添加自定义主板配置
任务目标
在Coreboot源码树中为一块新的自定义主板添加完整的构建配置,使该主板能够被make menuconfig识别并生成对应的.config,最终可通过make启动编译流程。本案例以虚拟主板example/custom_board为例,演示从创建目录到生成可编译配置的完整最小路径。
前置条件
- 已克隆Coreboot源码树并完成
make crossgcc-i386(或所需架构工具链) - 当前目录为Coreboot源码根目录
- 主板依赖的芯片组/CPU已有现成的Coreboot支持(本例使用QEMU/Q35作为验证目标,避免真实硬件依赖)
实现步骤
自定义主板配置的核心是创建src/mainboard/<vendor>/<board_name>/目录,并在其中放置Kconfig、Kconfig.name和board_info.txt三个必要文件。其中Kconfig.name负责让主板出现在menuconfig列表中,Kconfig定义主板的依赖与默认选择,board_info.txt提供构建系统所需的元信息。
关键完整代码
以下为src/mainboard/example/custom_board/目录下三个文件的完整内容:
# Kconfig.name — 使主板在menuconfig中可见
config BOARD_EXAMPLE_CUSTOM_BOARD
bool "Custom Board"
select BOARD_ROMSIZE_KB_8192
select SOC_INTEL_QEMU_Q35
# Kconfig — 主板配置定义
if BOARD_EXAMPLE_CUSTOM_BOARD
config MAINBOARD_DIR
string
default "example/custom_board"
config MAINBOARD_PART_NUMBER
string
default "Custom Board v1.0"
config MAINBOARD_VENDOR
string
default "Example"
config MAINBOARD_FAMILY
string
default "Custom_Series"
config DEVICETREE
string
default "devicetree.cb"
config OVERRIDE_DEVICETREE
string
default ""
config CBFS_SIZE
hex
default 0x800000
config HEAP_SIZE
hex
default 0x4000
endif # BOARD_EXAMPLE_CUSTOM_BOARD
# board_info.txt — 构建系统元信息
Vendor name: Example
Board name: Custom Board
Category: eval
ROM protocol: SPI
ROM socket: SOIC-8
ROM package: DIP-8
ROM voltage: 3.3V
ROM protocol: SPI
Flashrom support: yes
同时需要在src/mainboard/example/custom_board/下创建最小devicetree.cb(设备树配置),否则构建会在解析设备树阶段失败:
chip soc/intel/qemu_q35
device domain 0 on
device pci 00.0 on end # 宿 bridge
device pci 1f.0 on end # LPC
end
end
构建与验证
- 将上述文件放入正确路径后,在Coreboot根目录执行:
make menuconfig
在Mainboard → Mainboard vendor中选择Example,随后Mainboard model中应出现Custom Board选项。选择后保存退出。
- 确认生成的
.config包含以下关键行:
CONFIG_BOARD_EXAMPLE_CUSTOM_BOARD=y
CONFIG_MAINBOARD_DIR="example/custom_board"
CONFIG_MAINBOARD_PART_NUMBER="Custom Board v1.0"
- 执行编译验证配置完整性:
make
通过判定标准:编译过程能够通过Kconfig解析、设备树解析并进入实际编译阶段(即开始编译romstage/ramstage等组件),不出现Kconfig: symbol not found或devicetree.cb: parse error类错误。由于QEMU目标不需要真实固件烧录,编译生成build/coreboot.rom即视为配置链路完整可用。
常见问题
- menuconfig中看不到新主板:检查
Kconfig.name中bool后的字符串是否非空,且文件位于src/mainboard/example/custom_board/下;执行make menuconfig前无需额外注册,Kconfig构建系统会自动扫描该目录。 - 编译报错缺少芯片组支持:本案例使用
SOC_INTEL_QEMU_Q35,若需真实硬件,需将select行替换为实际芯片组对应的Kconfig符号,并确保该芯片组在Coreboot中已有支持。 - devicetree.cb语法错误:最小设备树必须包含
chip根节点和至少一个device条目,且chip路径必须与Kconfig中select的SoC符号对应。