黑苹果仿冒显卡
MacOS 的 IOKit 检测设备 ID 来决定那个驱动来驱动设备。因此指定设备 ID 即可欺骗 IOKit ,让它加载对应的驱动。这么做的前提是,有驱动能够驱动设备。
一些免驱卡,不能免驱,原因大概是驱动里没有包含你的显卡的设备 ID ,导致无法驱动。苹果只需要管自家的硬件,所以驱动里包含的设备 ID 是有限的。
1、确定显卡的设备 id
Windows 平台使用 GPU-Z,或者在设备管理器中查看,MacOS 平台下,点击系统信息报告,找到显卡那一项就可以看到设备 ID。
设备 id 一般是下面的样子
# GPU-Z 里看到的设备 ID,前四位和后四位会倒过来。
# 例如:GPU-Z 内看到是 10DE-13C0,实际上是 0x13C010DE。
0x3E9B8086
0x67DF1002
0x13C010DE
0x 指的是十六进制,最后四位是供应商 ID,Intel 是 8086;AMD/ATI 是 1002,NVIDIA 是 10DE,中间四位是设备 ID。我的 ID 是0x73DF1002,驱动里最相似的 ID 是 0x73BF1002
2、注入设备 ID
注入设备 ID 有两种办法,一种是设备属性注入,另一种是 SSDT 方法。
2.1、设备属性注入
大概过程是找到和自己设备 id 最接近的 ID,通过 OpenCore Configurator / Clover Configurator / OpenCoreAuxiliaryTools / ProperTree 编辑器,添加到 Device Properties 的部分。需要填写的属性如下。
# 这个是 PCI 路径,可以从 Hackintool 获取。
PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)
# 这个是就是最重要的设备 ID 了,按要求转换之后将 ID 填入即可。
device-id 数据类型 data 73BF0000
# 这个是显示的显卡型号,可以自己自定义。
model 数据类型 string Radeon RX 6800xt
转换设备 ID 的方法:
因为 “大小端” 的原因,要将 ID 的顺序改变。
- 第一步,删除 0x73BF1002 的前缀 0x,这部分是代表十六进制的前缀,id 不需要这部分。
- 第二步,1002 是供应商 ID,没啥用直接删。
- 第三步,两个两个为一组分开,然后按从右到左的顺序重新排列,其余的位置用 0 补齐。
- 例如: <73 BF> → <BF 73 00 00>
保存,重启即可生效。其他设备的仿冒也是同理。
2.2、SSDT 方法注入
第一步是找到设备的路径。
2.2.1、Windows 设备路径查找方法
进入 Windows,按下 Win+X
快捷键,在弹出的菜单中选择设备管理器。找到你的显卡,右键选择属性,然后切换到详细信息,在属性框中找到位置路径。
其中第二行就是我们要的信息。
ACPI(_SB_)#ACPI(PCI0)#ACPI(GPP8)#PCI(0000)#PCI(0000)#PCI(0000)
去掉其中的 #ACPI() 和 #PCI(0000),然后以英文 .
连接起来,就得到了 ACPI 路径。
_SB_.PCI0.GPP8
部分显卡的 ACPI 路径可能隐藏在 BIOS 设备名称下。
2.2.2、 MacOS 设备路径查找方法
MacOS 下自行使用 IORegistryExplorer.app 在 MacOS 中来完成查找路径,这里不细说了。但这个软件只支持 10.14 及以上的系统,所以使用 10.13.6 的同学只能安装第二个系统来找路径。
2.2.3、修改预编译的 SSDT
自行安装 MaciASL.app ,这是一款用来编译 .dsl
和 .aml
文件的编译工具。用 maciasl 打开 .dsl
文件。
.dsl
文件下载地址:
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/decompiled/SSDT-GPU-SPOOF.dsl.zip
首先将 .dsl
文件里的设备路径替换成自己的设备路径。
External (_SB_.PCI0, DeviceObj)-->External (_SB_.PCI0, DeviceObj)
External (_SB_.PCI0.PEG0.PEGP, DeviceObj)-->External (_SB_.PCI0.GPP8, DeviceObj)
Scope (\_SB_.PCI0.PEG0.PEGP)-->Scope (\_SB_.PCI0.GPP8)
Scope (\_SB.PCI0)-->Scope (\_SB.PCI0)
修改设备 ID,按照之前的步骤,完成转换之后填入下面。
"device-id",
Buffer (0x04)
{
0xBF, 0x73, 0x00, 0x00
},
修改显示的显卡型号,可以自己自定义。
"model",
Buffer ()
{
"AMD Radeon RX 9700XT"
}
编辑完成后将文件保存为 .aml
文件并导入 OpenCore 或者 Clover 重启系统就可以了。