2. 配置串口调试输出
任务目标
在 coreboot 的早期启动阶段(romstage)启用串口作为调试输出通道,使日志能够通过 UART 输出到终端。本案例以 QEMU x86 平台为验证环境,完成从配置到日志输出的最小闭环。
环境与依赖
- coreboot 源码树(建议版本 4.21 或更新)
- QEMU(x86_64 模拟器)
- 构建工具:gcc、make、flex、bison、libncurses-dev 等(coreboot 标准构建依赖)
实现步骤
coreboot 的串口调试输出由 CONSOLE_SERIAL_UART 配置项控制,同时需要指定 UART 端口地址。在 QEMU 环境中,默认使用 I/O 端口 0x3F8(COM1)。
进入 coreboot 源码根目录,执行以下配置命令:
make menuconfig
在菜单中依次设置:
- Console → Serial console → 勾选 Enable serial console
- Console → Serial console → UART for console → 选择
0x3F8 - Console → Serial console → Console buffer size → 保持默认(256)
- Chipset → South Bridge → 确认 Enable UART 已勾选(QEMU 平台默认开启)
保存配置后,构建固件:
make -j$(nproc)
构建产物位于 build/coreboot.rom。
验证方法
使用 QEMU 启动固件,并将串口重定向到标准输出:
qemu-system-x86_64 -bios build/coreboot.rom -serial stdio -display none
通过条件:终端出现 coreboot 启动日志,包含类似以下内容:
coreboot-4.21-xxxx Mon Jan 01 00:00:00 UTC 2024 starting...
...
若日志正常输出,说明串口调试通道已成功启用。若终端无输出,请检查:
- UART 端口地址是否与 QEMU 默认 COM1(0x3F8)一致
- 串口控制台是否在 romstage 阶段即被启用(可在
src/console/Kconfig中确认CONSOLE_SERIAL_UART默认值)
关键配置说明
coreboot 的串口初始化代码位于 src/console/uart.c,其核心逻辑为:
void uart_init(void)
{
uart_platform_init(CONFIG_UART_FOR_CONSOLE);
}
该函数在 romstage 早期被调用,完成波特率设置与 FIFO 配置。波特率默认 115200,可通过 CONFIG_UART_BAUDRATE 调整。
若需在自定义主板上启用串口,需在 devicetree.cb 中确认南桥 UART 控制器已启用,并正确设置 CONFIG_UART_FOR_CONSOLE 为对应端口地址。