为现代硬件构建功能完整的 GPU 驱动是一项艰巨的工程任务,通常需要数年的手动反向工程。对于 Apple Silicon 而言,挑战在于其“AGX”GPU 架构采用了复杂的固件 ABI(应用二进制接口)。在这种系统中,Linux 内核驱动并不直接与硬件通信;相反,它与运行在自定义实时操作系统(RTKit)上的 GPU 固件进行交互。为 M4 Mac Mini 和 MacBook Neo 开发新驱动的开发者面临了一个特别棘手的障碍:A18 Pro 固件 ABI 比之前的代际复杂得多,包含多出 1.5 倍的结构和两倍的指针,这使得手动重构变得极其困难。

文章描述了 A18 Pro 固件 ABI 的复杂性与之前代际相比所带来的巨大挑战。
为了克服这一难题,团队采用了一种以硬件追踪和“重放”机制为核心的方法。通过使用自定义构建的 hypervisor,他们能够精确观察 macOS 如何与 GPU 交互,然后重放这些硬件追踪。这使他们能够将特定的、隔离的捕获数据输入到 LLM(Codex)中,以解构固件的共享内存结构。例如,当面对最初无法重放的 336 MB 海量计算追踪时,团队转向了“单用户模式”策略。通过在没有 GUI 的情况下启动并运行一个微小的纯计算程序,他们捕获到了更小、更易管理的追踪,LLM 能够在几天内将其解构为可用的代码。这一过程分为两个部分:负责管理固件接口和缓冲区分配的内核空间,以及处理着色器编译器和命令流构建的用户空间。
该项目还突显了在复杂工程中使用 AI Agent 的独特权衡。作者指出,虽然 LLM 在系统化调试方面非常有效——例如将完整地址空间与已知良好的样本进行对比——但它也可能表现得过于“死板”。一名开发人员发现,专注于硬件完整性的 Agent 经常卡在微不足道的细节上。相比之下,第二名开发人员通过使用“受限”于首先构建 Mesa 图形栈需求的 Agent 取得了更快进展,仅在需要解锁特定功能时才进行反向工程。虽然最终生成的驱动足以以 200fps 的速度运行 Minecraft,并支持 Chrome 和 Firefox 中的 WebGL,但作者澄清说,代码尚未准备好供普通用户使用,且像“部分渲染”这样复杂的特性仍然非常不稳定且难以稳定。

文中提到该驱动足以以 200fps 的速度运行 Minecraft。

文章指出该驱动支持 Chrome 和 Firefox 中的 WebGL。
这种快速开发引发了关于此类代码来源和未来的争论。由于该项目利用 LLM 来处理专有硬件,它可能会与 Asahi Linux 等项目产生摩擦,因为后者对上游代码提交保持严格的“禁止 AI”政策。此外,使用 AI 生成的代码与专有硬件进行接口交互,引发了关于生成的二进制文件是否具有“污染”性质,以及此类工作是否能被正式接受到 Linux 内核中的疑问。目前,该项目作为一个概念验证,证明了 AI 辅助的反向工程可以将硬件移植的时间线从数年缩短至数周。