利用 AI 逆向工程硬件

Hacker News Top 工具

摘要

作者分享了如何借助 Claude Code 与一个 Windows 虚拟机捕获 USB 数据的自动化流程,逆向工程未被支持的扫描仪与 MIPI 摄像头硬件,并将该流程开源为通用工具 hw-harness,让 AI 高效完成繁琐的驱动逆向工作。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/15 16:13

# 使用人工智能逆向工程硬件 来源:https://blogs.gnome.org/uraeus/2026/10/15/aiandreverseengineerhardware/ 母亲去世后,我得到了一大箱旧胶片负片,里面记录着童年家庭旅行之类的照片。于是我决定买一台负片扫描仪,发现 Plustek 8200i 在 Linux 下是受支持的,就买了它。结果却发现扫描仪里的芯片已经换了,不再受 Linux 支持。之前我用 Claude Code 为我的一些硬件成功制作过 Linux 配置工具,比如我的 Dell 摄像头控制应用(https://gitlab.com/cschalle/appfordellwebcam),所以我想,也许 Claude 能帮我搞定一个可用的 SANE 驱动。但在很长一段时间里,我基本上卡住了,毫无进展,甚至一度放弃了这个项目好几个月。 后来我在 X 上看到了 Tom Crider(又名 Glorious Eggroll)(https://x.com/GloriousEggroll/status/2103816580966830314)的帖子,他讲述了如何用 AI 工具修复了一个鼠标驱动。他基本上描述了他是如何设置的——让 AI 代理完全控制一个 Windows 实例,以捕获修复驱动所需的数据。于是我把他的推文粘贴给 Claude,让它帮我设置一个 Windows 虚拟机,为我的扫描仪做 Tom 当时所做的同样的事情。我认为,能够在 Windows 下运行扫描并同时捕获 USB 数据的能力起到了奇效,可能还加上了 Claude Code 的改进,带来了巨大的差异。几个小时内,我就在 Linux 下完成了第一次扫描,当然质量有些问题,但 100% 可以辨认出负片中的图像。几天后,我得到了一个近乎完美的驱动,甚至支持红外扫描,准备投入使用了——结果却发现,在我放弃到再次尝试之间,已经有人向 SANE 提交了支持这款扫描仪的代码……这种事偶尔会发生。我还用 Claude 写了一个用于负片扫描的应用,我把它命名为 Negative Vibes(https://github.com/cschalle/negative-vibes),觉得这个名字挺可爱的。 总之,扫描仪项目成功后,我想:我能不能用这种方法来最终修复我笔记本上 MIPI 摄像头支持的最后几个问题呢?于是我要 Claude 重用我创建的那个 harness,通过更新内核驱动和 libcamera 来尝试修复我笔记本上的 MIPI 摄像头。我早上开始这项工作,到当天结束时,情况已经有了大幅改善(https://cschalle.github.io/mipi-fixes-x1-aura/),内核和 libcamera 的补丁都准备好了。 所以我觉得有必要和大家分享这些经验,虽然任何人都可以从头开始,但我确实让 Claude 把这个 harness 做成了通用的,并且写了文档,让其他想在自己硬件上尝试这条路的人能更容易一些。为无文档硬件编写驱动一直是一件苦差事。你捕获总线流量,盯着十六进制转储,猜测每个寄存器或控制传输的含义,然后逐一测试,通常要花好几周。这些工作在概念上并不难,但需要极大的耐心和技能。 这类工作非常适合 AI 模型。它可以阅读数千行 USB 捕获数据,注意到某个序列重复出现而只有一个字节在变化,并提出该字节含义的假设。它可以编写测试来验证,而且不会感到厌倦。人类仍然要决定构建什么并检查硬件上的实际效果,但枯燥的工作量大幅减少了。 **hw-harness(https://github.com/cschalle/hw-harness)** 请注意,我的项目并没有以这种形式使用 hw-harness,因为当时这基本上是定制代码,所以这个项目是试图从我在工作中使用的脚本出发,将这个 harness 做得更通用、更易于共享。hw-harness 旨在帮助你的 Claude 或 Codex 会话完成以下工作: 1. 记录参考会话。在 KVM 虚拟机中运行厂商的 Windows 驱动,并将真实设备直通给虚拟机。2. 从虚拟机外部捕获。在 Linux 主机上使用 usbmon 记录流量。它位于直通层之下,虚拟机看不到它。3. 在 Linux 上用你自己的驱动执行相同操作,并以同样方式捕获数据。4. 比较两条追踪记录的差异。两者来自同一"仪器",因此可以直接对比。差异就是你的驱动 bug 清单。 对于没有可捕获总线的设备(比如内置 MIPI 摄像头),harness 改用 Windows 端检查的方式。这意味着查看 INF 文件、注册表数据、ACPI 表和设备属性。 这种方法应该是可行的,因为它不依赖复制任何代码,而是观察硬件的行为,只从 Windows 驱动中提取配置数据,因此新驱动中的每个常量都可以追溯到某个记录。 对于感兴趣的朋友们,我写了 3 篇关于我所做的项目以及需要什么的简短描述。 **项目一:Plustek OpticFilm 8200i 的 SANE 后端(https://htmlpreview.github.io/?https://github.com/cschalle/OpticFilm8200i-sane/blob/main/docs/comparison/drivers-comparison.html)** 两张负片上两个扫描仪驱动的对比 ——(https://blogs.gnome.org/uraeus/files/2026/10/drivercompare.png) 比较两个可用驱动的输出。 第一个项目是为较新的 Plustek OpticFilm 8200i 编写的 SANE 后端。它使用 Genesys GL128 控制器(USB 07b3:1825),之前没有 Linux 支持。同名的旧型号使用 GL845,已被 SANE 支持。 该后端支持: - 彩色、灰度、红外和彩色+红外模式 - 300 到 7200 dpi 的分辨率,每通道 8 位或 16 位 - 从红外通道进行灰尘和划痕去除 - 针对浓密负片的曝光倍增功能 它被打包为 Fedora RPM,每次推送都会自动构建。我主要用自己的 Negative Vibes 应用来测试它,因为 Linux 下负片扫描的选择不多。 上游 SANE 的 genesys 后端也在 2026 年 9 月获得了对该扫描仪的支持,所以我比较了两者。在 3600 dpi 下两者都能分辨相同的精细细节。我的版本在全分辨率下更快(34.6 秒 vs 54.4 秒),并且支持红外除尘。上游提供更多的分辨率档位。该网页有一个可交互的并排对比,你可以去看看。这些是单台机器、单帧的结果,所以请将其视为一个数据点。看看我制作的交互页面(https://htmlpreview.github.io/?https://github.com/cschalle/OpticFilm8200i-sane/blob/main/docs/comparison/drivers-comparison.html),展示了两个驱动的当前状态,希望我所做的发现能被 SANE 项目用来修复上游驱动的一些小问题。总之,由于我预计包括我自己在内的所有人都会在上游驱动达到同等水平后使用上游驱动,所以这个项目更多是作为一个概念验证。 **项目二:Negative Vibes(https://github.com/cschalle/negative-vibes)** [](https://blogs.gnome.org/uraeus/files/2026/10/afterscan.png) 完成的负片全幅扫描,包括红外清洁。 只有驱动本身没有太大用处,如果扫描负片仍然很痛苦的话,所以我构建了 Negative Vibes。它是一个 GNOME 应用,用 Rust 编写,可在任何支持胶片的 SANE 扫描仪上扫描彩色和黑白负片及幻灯片。 扫描结果完全保持扫描仪输出的原始形式:16 位、线性、带红外通道。其他一切功能都是叠加在其上的非破坏性设置,因此你可以更改效果并再次导出。它包含: - 密度空间负片反转,带胶片基底和染料串扰校正 - 卷级设置与逐帧覆盖 - 红外和软件去尘 - 通过 ArgyllCMS 进行 IT8 校准 - 导出为 TIFF、JPEG、PNG 和 DNG,带 ICC 配置文件和元数据 它以 Flatpak 形式发布,包含扫描仪后端。目前在 8200i 上测试过。目标是支持任何 SANE 支持的胶片扫描仪。为此,SANE 需要一种标准方式来暴露红外通道,而目前还没有。 **项目三:修复我的 ThinkPad 上的 MIPI 摄像头(https://cschalle.github.io/mipi-fixes-x1-aura/)** 展示修复前后的 MIPI 输出。颜色比看上去要好,因为我在会话结束时坐在一个光线较暗的房间里。(https://blogs.gnome.org/uraeus/files/2026/10/mipifixes.png) 展示修复前后的 MIPI 输出。颜色比看上去要好,因为我在会话结束时坐在一个光线较暗的房间里。 我的 Lenovo ThinkPad X1 Carbon Gen 14(Aura Edition)中的摄像头使用的是 Intel IPU7 后面的 Sony IMX471 传感器。在 Linux 上,它生成的图像较暗,有严重的暗角和明显的黄绿色偏色。mipi-fixes-x1-aura 收集了这些修复。这只与这台笔记本相关,所以它不是一个大型打包项目,但我已经将内核补丁提交给了 Kate Hsuan,libcamera 补丁正在由 Wim Taymans 审阅,准备提交给 libcamera。 内核(IMX471 驱动): - 一个裁剪选择 bug 在存储裁剪矩形之前就返回了错误,因此 libcamera 假定使用了完整的像素阵列。 - 测试图案寄存器声明的宽度有误。 - 模拟增益上限太低,损失了大约 1.8 档灵敏度。 libcamera 软件 ISP: - 完全缺少镜头阴影校正,导致四角暗了约 2.7 档。 - 白平衡统计以传感器原生位深度求和,而黑电平为 8 位。这导致白平衡偏移,修复适用于任何 RAW10/RAW12 传感器。 在受控的低光测试中,帧亮度从 31.1 提升到 90.9。红/绿和蓝/绿比值从 0.890 和 0.672 变为 1.047 和 0.823,接近 USB 摄像头参考值。低光下蓝色仍差约 17%,我将其归因于灰世界白平衡。Fedora 44 RPM 在 releases 页面上。 我的心得 - 参考捕获是一大进步。让 AI 将已知良好的追踪记录与失败的记录进行对比,把模糊的"它不工作"变成了具体的差异列表。例如对于 MIPI 摄像头,连接一个 USB 摄像头让 Claude 可以比较两者的捕获,这是关键。 - AI 擅长处理枯燥的工作。包括解码捕获数据、编写探测程序和交叉检查常量。我仍然必须是那个拿着实体硬件的人。 - 真实硬件是唯一的裁判。上面的每一项声明都已在实际扫描仪或笔记本上验证过。 如果你有 Linux 驱动缺失的硬件,试试 hw-harness。再次感谢 Glorious Eggroll 的启发。 **注意:我并不是在声称我的扫描或 MIPI 摄像头现在已经完美了,但现在扫描仪给我带来了不错的扫描效果,MIPI 摄像头也比以前好多了。我相信随着时间的推移,我们还能进一步调整和打磨,但我很高兴它让我在缺乏这类工作深入知识的情况下也能有所推进。** —

相似文章

@mylifcc: 今天 Hacker News 上炸锅的一个神帖:《用 AI 逆向工程硬件》。 原帖本来是一个温情的 Linux 开源驱动故事,结果评论区一位专业音频硬件老板的“自白”,直接让整个硬件与嵌入式圈子破防了—— 靠“专有算法”和“未公开协议”躺…

X AI KOLs Timeline

Hacker News 上热帖《用 AI 逆向工程硬件》引发硬件与嵌入式圈子震动,一位专业音频硬件厂商在评论区坦言,依赖“专有算法”和“未公开协议”构建的护城河正被 AI 在数天内瓦解。

@apivixtls: 开源前核心成果(DeepSeek V4 Flash 驱动)在项目开源之前,我使用 https://github.com/zhaoxuya520/reverse-skill… 完成了多项高难度的逆向与安全研究工作,充分验证了模型在实际复杂工…

X AI KOLs Timeline

作者@apivixtls发布了reverse-skill工具,这是一个专为逆向工程和安全分析设计的AI Agent工作流路由和工具编排系统,并展示了其在Go反汇编、APK反编译、Web漏洞利用等场景中的强大能力。