为未公开的硬件开发驱动程序传统上是一个劳动密集型的过程,需要捕获原始总线流量、手动检查十六进制转储,并对寄存器行为提出假设——这个循环往往需要数周甚至数月的耐心试错。Christian F.K. Schaller 已经证明,利用像 Claude 这样的 AI 智能体可以显著简化这一“苦差事”。通过让 AI 模型访问数千行 USB 捕获数据,它可以识别出单个字节发生变化的重复序列,提议这些字节代表的含义,并生成测试脚本在真实硬件上验证这些发现。

该方法涉及创建一个对比框架,为成功的运行建立基准。对于具有可访问总线的设备(如扫描仪),工作流程包括在虚拟机中运行厂商的 Windows 驱动程序,同时通过 `usbmon` 等工具记录来自宿主操作系统的结果流量。这创建了一个参考轨迹。随后,开发者在 Linux 上使用初步的自定义驱动程序执行类似的各种操作,捕获第二个轨迹,并使用 AI 对两者进行差异对比。由于两个轨迹都源自同一台物理仪器,捕获数据中的任何差异都会突出显示新驱动程序中的特定错误或缺失的功能。

同一张底片上两个不同扫描仪驱动输出的并排对比。
用于建立逆向工程工作流基准的扫描仪驱动输出对比。blogs.gnome.org

这张图片展示了对比框架的方法论,其中对比了厂商驱动程序和自定义驱动程序。

Schaller 将此方法应用于多个项目,包括为 Plustek OpticFilm 8200i 开发 SANE 后端(Linux 用于扫描仪的标准子系统),以及修复 Lenovo ThinkPad X1 Carbon 上的 MIPI 摄像头问题。在后一种情况下,AI 帮助识别了内核级别的裁剪选择错误以及导致严重色彩失真和暗角的不正确寄存器宽度。虽然人类仍负责操作物理硬件并验证最终结果,但 AI 处理了解码捕获数据和交叉检查常数等繁重工作。然而,局限性依然存在:真实的硬件测试是不可替代的,且某些内部组件——例如那些没有外部总线可供监听的组件——需要对 INF 文件、注册表数据和 ACPI 表进行更复杂的检查。

应用 AI 辅助修复前后的 MIPI 摄像头输出视觉对比。
在 Lenovo ThinkPad X1 Carbon 上识别并修复内核级裁剪选择错误和寄存器宽度的结果。blogs.gnome.org

这张图片展示了 Lenovo ThinkPad X1 Carbon 摄像头 AI 辅助调试过程的具体结果。