一次固件重建究竟要做些什么
从付款订购固件到板卡能被识别,中间有五个步骤,其中两个要由你来完成,而不是我们。
作者:Lethal Hardware Desk
订购定制固件,拿到的并不是一个早已存在的文件,而是启动了一次编译。这次编译需要一项只有你能提供的输入:烧录在你那块卡的 FPGA 里的标识符。所以商品目录里写的是固件“制作中”,而不是“已发放”。这是本店唯一一件无法在你等待时自动完成交付的商品。下面把整个流程写清楚,好让处于制作周期中的订单一目了然,而不是悄无声息。
一份镜像,对应一颗芯片
每颗 Artix-7 FPGA 都有一个唯一的 device DNA,也就是烧录在硅片里的序列号。定制固件就是针对这个值生成的,镜像无法在另一颗芯片上完成配置。其他一切都由这一点决定:DNA 没写进工单,编译就无法开始;文件不能在第二块卡上复用;换卡意味着重新编译,而不是复制一份。这也意味着镜像对其他任何人都毫无价值,而这正是绑定的意义所在。
开工之前,工单里需要什么
- 订单号,让编译挂在一个已付款的订单上,而不是挂在一段聊天记录上
- DNA ID,在副机上从你自己的卡里读出来
- 板卡照片,要拍到丝印上的型号和版本号
- FPGA 标记,从芯片上读出来,而不是从商品页复制
- 你打算玩的游戏,因为档位和配置都是针对它来选的
这些都不是走形式。丝印上的版本号决定了镜像要驱动哪颗 USB 桥接芯片和哪颗 Flash 芯片,而两块在商品页上都写着 75T 的板子,这两样可能都不一样。FPGA 标记决定芯片型号,DNA 决定绑定。五项齐全的工单会往前推进,只写了一个游戏名的工单则不会。
不要发视频里、朋友截图里或者旧订单里的数值。DNA ID 要在你的副机上,从插在你自己机器里的那块卡读取。针对错误数值编译出的镜像,无法在你的卡上完成配置。如果不确定自己读得对不对,就在工单里说明,而不是瞎猜。错一个字符,就得重新编译一次。
选择 donor 配置
DMA 卡响应主机的配置读取时,用的是一层可写的覆盖数据,而不是综合时固定下来的值。所以,这张卡对外呈现的身份其实就是数据。选择 donor,就是决定这些数据描述的是哪一个真实设备,包括厂商 ID 和设备 ID、类代码、BAR 布局、capability 列表,以及其后的扩展条目。这项工作讲究的是一致,而不是隐蔽。比如某个配置的类代码和设备 ID 对不上,或者子系统 ID 是空的,任何读取这些寄存器的程序都能发现这个矛盾。固件页面上的各个档位——Emulated、Slotted、Slotted v2、Signature 和 Sovereign——区别之一,就在于编译时能选用哪些配置;此外,各档支持的反作弊列表和换新保障时长也不一样。
编译与刷写
输入确定之后,把配置写进设计,再针对你的芯片型号综合成比特流,最终得到一个以你的订单命名、与你的 DNA 绑定的文件。所需时间就是网站已经公布的那个:付款核实后,固件订单通常在 24 到 48 小时内制作完成。刷写则由你自己来操作:在卡插在游戏主机上通电的状态下,通过卡上的刷写口把镜像写进去。真正的写入要花几分钟,而不是几秒钟。一瞬间就结束的刷写,其实什么都没写进去。
工具写入期间,Flash 里既没有旧镜像,也没有新镜像。有三件事会破坏这个过程:拔线、让副机进入睡眠,或者切断游戏主机的电源。任何一件都几乎必然导致板卡无法被识别,而整个流程里没有别的步骤会造成这种后果。开始之前,先关闭副机的睡眠。
核验:只有这个顺序才能说明问题
- 1把游戏主机彻底关机——重启时插槽仍然通电,什么也证明不了
- 2把卡上的线从刷写口换到数据口
- 3确认副机上出现了 FTDI 数据设备,并且没有黄色感叹号
- 4运行随订单提供的连接测试,确认它能连到卡
- 5读回 DNA ID,核对它和镜像编译时所用的数值是否一致
只有最后一步能形成闭环,而它恰恰是最常被跳过的一步。板上的 LED 不能作为证据:它们反映的是供电,而不是配置,Flash 里的镜像即使已经损坏,它们也照样亮着。整个流程有一件事是做不到的,那就是改变游戏里发生的事情。固件决定的是,这张卡的 PCIe 身份在任何枚举它的程序眼里是什么样子。这只是几个暴露面中的一个。今天看起来像普通硬件的配置,说的只是今天的情况。
对本文有疑问?在 Discord 提问
全部文章