跳到主要内容
SecondHome
文章GNOME 博客(Christian Schaller)· Christian F.K. Schaller· 原文发布 直连可达

Using Artificial Intelligence to reverse engineer hardware

策展于 2026年10月16日 · 笔记约 7 分钟读原文 ↗

这是 GNOME 博客 2026 年 10 月 15 日的实战记录,作者 Christian Schaller,GNOME 与 Red Hat 圈的老兵。他用 Claude Code 给三件缺 Linux 支持的硬件补齐驱动侧的坑:一台底片扫描仪、一颗笔记本内置摄像头,外加一个配套扫描应用,方法最后沉淀成开源工具 hw-harness。这事成了,而且成了三回,时间尺度从几小时到几天。

从一箱底片开始

起点很私人。作者母亲去世后留下一箱底片,存着他童年家庭旅行的影像,他为此买了台 Plustek OpticFilm 8200i 底片扫描仪。

买前以为 Linux 原生支持,到手才发现厂商换了芯。同名新型号改用 Genesys GL128 控制器(USB ID 07b3:1825),老款的 GL845 早就进了 SANE(Linux 的扫描驱动框架),新的没人管。

他之前用 Claude Code 写成过 Dell 摄像头的配置工具,这次却在扫描仪上卡死,项目一搁几个月。转机来自 X 上开发者 GloriousEggroll 的一条帖子:给 AI agent 一整个 Windows 实例的控制权,让它自己抓数据,结果修好了一个鼠标驱动。作者把帖子粘进 Claude Code。照方抓药。

几小时后,他在 Linux 下扫出第一张图,有瑕疵但认得出画面。再过几天,驱动接近完善,连红外除尘都带上了。

他后来还发现有人在这几个月里已往上游 SANE 提交了同款支持,作者对此只有一句 “it happens sometimes”。缘分而已。

hw-harness:给 AI 装上看得见总线的眼睛

方法被他泛化成开源工具 hw-harness,核心流程四步:

  1. KVM 虚拟机(Linux 内核自带的虚拟化方案)里跑厂商的 Windows 驱动,真实设备直通给虚拟机
  2. 宿主机用 usbmon(内核的 USB 抓包工具)录下全部总线流量,这一层在直通之下,虚拟机毫无感知
  3. 切回 Linux,让开发中的驱动做同一个操作,照样录一份
  4. 比对两份流量,差异即 bug 清单

对没有 USB 总线的内置设备,比如 MIPI 摄像头(笔记本内部排线连接的那类传感器),工具改从 Windows 侧翻 INF 驱动描述文件、注册表、ACPI 表和设备属性。

合法性他想得明白。全程不拷一行厂商代码,只观测硬件行为,新驱动里每个寄存器常量都能溯源到一条观测记录。个人以为这条线就是此类成果敢不敢发布的分界,守得住就晒得住。

扫描仪:34.6 秒对 54.4 秒

SANE 后端支持彩色、灰度、红外及其组合,300 到 7200 dpi,每通道 8 或 16 位,另有给浓密底片的曝光倍增器,打包成自动构建的 Fedora RPM。

配套应用叫 Negative Vibes,GNOME 桌面上的 Rust 程序,任何带胶片能力的 SANE 扫描仪都能用。扫描件保持 16 位线性原始数据加红外通道,编辑全程非破坏性。

功能覆盖片基与染料串扰校正、整卷统一设置加单帧覆盖、借 ArgyllCMS 做 IT8 标准色靶校准,导出带 ICC 特性的 TIFF 或 DNG。短板是 SANE 尚无暴露红外通道的标准接口,应用目前只在 8200i 上验证过。

对比数据他给得老实。3600 dpi 下,他的后端与 2026 年 9 月进上游的那份解析细节相当;全分辨率下他的更快,34.6 秒对 54.4 秒,还多一个红外除尘。

他特意注明这是单机单帧的结果,只当一个数据点看。

摄像头:当天出补丁

第三件是 ThinkPad X1 Carbon 第十四代 Aura 版的内置摄像头,Sony IMX471 传感器挂在 Intel IPU7 图像处理单元下,症状是画面暗、暗角重、偏黄绿。他早上开工,当天收工。

内核侧修了三个 bug:裁剪区域还没保存矩形就提前返回错误;测试图案寄存器宽度写错;模拟增益上限过低,凭空丢掉约 1.8 档进光量。

libcamera(Linux 的摄像头框架)软件 ISP 侧修了两个:镜头阴影校正压根没实现,四角暗了约 2.7 档;白平衡统计按传感器原生位深求和,黑电平基准却按 8 位算,这一条会影响所有 RAW10/RAW12 传感器。

效果可以量化。弱光场景的单帧亮度值从 31.1 升到 90.9,红绿、蓝绿通道比从 0.890/0.672 回到 1.047/0.823,接近一支正常 USB 摄像头的参考值;蓝色仍缺约 17%,他归因于灰世界白平衡算法的先天局限。

内核补丁已交维护者 Kate Hsuan,libcamera 补丁在 Wim Taymans 手里审,Fedora 44 的 RPM 挂在发布页。

AI 干的都是苦活

分工拆开看很朴素。AI 包揽重复劳动:解码抓包、在一串重复序列里盯出那个变化的字节、猜寄存器含义、写测试探针、交叉核对常量。作者的原话:

“The AI is good at the tedium.”

人负责三件事:定做什么、把着真机、验证结果。他反复强调每个结论都在真实硬件上核过,另一句原话同样硬气:

“Real hardware is the only judge.”

最值钱的经验是参考抓包。厂商驱动的正常流量配一份 Linux 驱动的故障流量,diff 之后,模糊的 “画面偏暗” 立刻变成寄存器级的具体 bug 清单。

摄像头项目里插一支正常 USB 摄像头给 Claude 当对照样本,被他点名为关键动作。

他对传统驱动开发的评价是没有概念难度,只是极吃耐心和技能。AI 补的恰好是耐心这块。

站长落点

对做 Agent 管线的人,这篇有一点可以直接搬走:给模型一个可观测的执行环境,比在提示词里堆形容词管用。VM 直通加总线抓包,等于给 AI 发了一双看得见硬件的眼睛,剩下的比对和推理它自己能搞定。

边界也要认。作者反复声明成果是改进而非完工,补丁进不进主线还在别人手里;发布的 hw-harness 也是泛化版,不是他项目里那套原始脚本。

这套打法还吃一个前提,故障可复现、流量可抓,碰到黑盒设备 AI 照样没辙。

评论区已经有人排下一个目标,想请这套工具去救一块 Guillemot 老声卡的 ALSA 驱动。方法论若能在社区扩散,长尾老设备是最直接的受益方。

持续耕种,欢迎订阅 🌱

RSS全站 ·原创 ·策展 ·雷达;公众号「炼金术」同步更新。