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

A18 Pro 固件 ABI 结构的视觉表示。
复杂的 A18 Pro 固件 ABI,其包含的结构和指针显著多于之前的代际。codyho.dev

文章描述了 A18 Pro 固件 ABI 的复杂性与之前代际相比所带来的巨大挑战。

为了克服这一难题,团队采用了一种以硬件追踪和“重放”机制为核心的方法。通过使用自定义构建的 hypervisor,他们能够精确观察 macOS 如何与 GPU 交互,然后重放这些硬件追踪。这使他们能够将特定的、隔离的捕获数据输入到 LLM(Codex)中,以解构固件的共享内存结构。例如,当面对最初无法重放的 336 MB 海量计算追踪时,团队转向了“单用户模式”策略。通过在没有 GUI 的情况下启动并运行一个微小的纯计算程序,他们捕获到了更小、更易管理的追踪,LLM 能够在几天内将其解构为可用的代码。这一过程分为两个部分:负责管理固件接口和缓冲区分配的内核空间,以及处理着色器编译器和命令流构建的用户空间。

该项目还突显了在复杂工程中使用 AI Agent 的独特权衡。作者指出,虽然 LLM 在系统化调试方面非常有效——例如将完整地址空间与已知良好的样本进行对比——但它也可能表现得过于“死板”。一名开发人员发现,专注于硬件完整性的 Agent 经常卡在微不足道的细节上。相比之下,第二名开发人员通过使用“受限”于首先构建 Mesa 图形栈需求的 Agent 取得了更快进展,仅在需要解锁特定功能时才进行反向工程。虽然最终生成的驱动足以以 200fps 的速度运行 Minecraft,并支持 Chrome 和 Firefox 中的 WebGL,但作者澄清说,代码尚未准备好供普通用户使用,且像“部分渲染”这样复杂的特性仍然非常不稳定且难以稳定。

Minecraft 在 M4 Mac Mini 上以每秒 212 帧运行的截图。
生成的驱动能够以高帧率运行 Minecraft,例如在 M4 Mac Mini 上达到 212fps。codyho.dev

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

使用新驱动显示 three.js WebGL 演示的 Web 浏览器。
该驱动支持 Chrome 和 Firefox 中的 WebGL,如这些 three.js WebGL 演示所示。codyho.dev

文章指出该驱动支持 Chrome 和 Firefox 中的 WebGL。

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