使用 AI 辅助逆向工程将 ThinkPad X61 移植到 coreboot

AI 辅助逆向工程加速固件移植

将大语言模型 (LLM) 集成到逆向工程工作流中,可以将固件移植到不支持的平台所需的时间从几个月缩短到几周。在 ThinkPad X61 的案例中,LLM 被用于分析厂商 BIOS 模块并提取初始化序列,尽管该过程仍需要大量的人工干预和领域专业知识来纠正幻觉和硬件特定的错误。

挑战:移植 ThinkPad X61

ThinkPad X61 使用 GM965 北桥和 ICH8 南桥。虽然与受支持的平台(如 X200 (GM45))类似,但 X61 仅支持 DDR2,且缺乏泄露的文档,这使得逆向工程成为 coreboot 移植的唯一可行路径。之前使用 SerialICE 等工具(在 QEMU 中运行固件并将 IO/MMIO 转发到实际硬件)的尝试均未能产生可用的移植版本。

方法论:结合传统工具与 LLM

数据提取与基准建立

在利用 AI 之前,开发者通过使用标准 coreboot 工具从运行中的系统中转储信息,建立了已知的良好基准:

  • inteltool: 用于 PCI 配置空间和北桥/南桥寄存器概览。
  • acpidump, acpixtract, and iasl: 用于转储和反编译 ACPI 表以了解设备描述和电源管理。
  • ectool: 用于分析嵌入式控制器 (EC) RAM 和行为。

AI Agent 集成

为了分析 Phoenix BIOS,开发者使用 bios_extract 将镜像拆分为模块,并为 AI agent (Claude Opus 4.6) 提供了特定工具:

  • ghidra-cli: 用于分析 PE32 模块,例如在 raminit 中使用的 Intel Memory Reference Code (MRC),在这种情况下,C 风格的反编译最为有效。
  • radare2: 用于固件的 16 位实模式部分。

"Vibe 逆向工程"的现实情况

虽然初步结果看起来是即时的,但开发者指出,“vibe 逆向工程”(仅依赖 LLM 输出)对于生产级固件来说是不够的。LLM 需要基于开发者对 X60 和 X200 平台的先前经验进行大量的“手把手”指导和引导。

过程中需要进行的关键纠正包括:

  • GPIO Muxing: 识别出 X61 在 GPIO42 上有一个用于 SMBUS 的 GPIO 复用,这会影响 SPD 与 EEPROM 的可见性。
  • Memory Specifications: 纠正内存控制器支持为 DDR2 533MT/s 和 666MT/s(LLM 错误地建议了 666/800MT/s)。
  • Register Access: 修复了错误大小的寄存器读/写(例如,向 16 位寄存器进行 32 位写入)并纠正了 GMCH FSB 频率的来源为 MCHBAR 寄存器。
  • CAS Semantics: 解决 coreboot 编码与 MRC 编码对于 CAS 的混淆。

硬件测试与刷写工作流

测试是通过使用带有 RS232 UART 连接器的扩展坞进行串行输出进行的。刷写是通过使用 CH341A SPI 编程器,并使用夹具连接到板底部的 SOIC8 flash 芯片上完成的。使用的刷写命令是:

flashprog -p ch341a_spi --ifd -i bios -w build/coreboot.rom

上游代码并进行质量保证

将代码提交至上游时,揭示了几个 LLM 引入或遗漏的“在我机器上能运行”的错误。通过资深贡献者的彻底审查,识别出了以下问题:

  • Hallucinated Semantics: 在 GM965 0xa00 MCHBAR 范围内,存在错误的寄存器名称和幻觉语义的块语义。
  • Logic Errors: 索引错误的定时表 (timing tables) 和含义错误的位字段 (bitfields)。
  • Hardcoded Values: 初始化位和设备使能,这些是 X61 特有的,但却被呈现为通用的芯片组代码。

对固件的更广泛影响

该项目证明了逆向工程闭源 Binary 固件变得更加可行。开发者建议,这最终可以应用于 Intel FSP (Firmware Support Package),它是 Ghidra 可以分析的 la 32 位 PE 代码。这一转变可能会减少硅厂商依赖闭源 Binary-only 固件的动力,因为理解和替换它的门槛正在不断降低。

社区洞察

社区讨论强调了 X61 这一形态的持久吸引力,以及 LLM 可以赋能非专业开发者去处理以前“不可能”的移植项目。一位用户指出:

"对于现在这来说,这真是一个复杂的恩赐,因为从理论上讲,特别是随着 LLM 能力的提升,像我这样的笨蛋可能真的能够将 Coreboot 移植到不支持的平台……这可能是我最好的机会,因为我可能不会再遇到这样的场景了。"

此外,开发者还预告了将 X61 移植到 fstart,一个用 Rust 编写的 coreboot/u-boot 替代方案。

Sources