如何仿冒显卡设备ID以驱动显卡?
前言
最后更新:2024/11/11,添加了 RX6950XT/6650XT 的仿冒 ID 及 SSDT 文件。
开篇要明确的第一点:macOS 的驱动是系统内置驱动,理论上,运行 macOS 的电脑只有苹果公司的 Mac 系列电脑,因此苹果公司不会为他们不使用的硬件开发驱动,没有特别原因也不会更新驱动。虽然也有第三方公司为它们的产品开发 macOS 专用的驱动,但这种情况仅常见于 WiFi/蓝牙/采集卡 等功能较为细分或其它专业设备,显卡是明确不在此列的。
所以,在 OpenCore/Clover 的设备属性(DeviceProperties)中,它们提供了仿冒设备 ID 的功能(Spoof Device ID)。设备ID(device-id)属性主要用于仿冒设备 id 从而驱动 macOS 原本不支持的设备,例如 HD4400 仿冒 HD4600;RX550 512SP 仿冒 RX550 640SP;再比如不支持的 ALC 声卡或英特尔网卡型号。
其原理是,macOS 的 IOKit 通过检测设备 ID 来决定哪些设备可以连接到哪个驱动文件,这些存放驱动的 kext 本身能支持的设备是很多的,但是苹果自己的驱动里包含的设备 ID 是有限的,因此指定 device-id 即可欺骗 IOKit ,让它加载对应的文件以驱动设备。「提示」可以这么做的前提就是存放驱动的 kext 本身能够支持设备,所以给 RTX3090 指定 RX 6900XT 的设备 ID 是没有用的。显卡设备 ID 有案例可以参考,比如黑苹果星球一直在整理的 10.15 原生独显驱动支持表 / 11.0 原生独显驱动支持表。
上图中,0x67FF1002 就是 macOS 原生支持的 RX 550 640SP 的设备 ID,它位于 S/L/E 目录下的 kext 文件中。
原因
这部分和解决方法无关,晕字的可以跳过这个部分。
接着用 RX550 举例,苹果内置的驱动仅包括 Baffin 和 Polaris 核心 RX550 640SP 版的设备 ID:0x67FF1002,但同时 AMD 还用 Lexa 核心推出了 RX 550 512SP 的 0x699F1002 版本。由于设备 ID 和 macOS 内置的 ID 对不上号,导致无法驱动。
那为什么同一个显卡型号存在两种甚至三种不同的芯片型号?这里涉及一个 AMD 营销套路的小知识点,顺便说一下。
- 随着工艺制程和设计水平的提升,芯片集成的晶体管规模越来越大;
- 芯片制造存在良品率,晶体管规模越大工艺越新,良品率就越低,这是客观现实;
- 现在的 GPU 芯片动不动就上百亿晶体管规模,所以在制造的过程一部分晶体管造出来就是坏的,无法工作的;
完整的 Polaris21 和 Baffin 核心(主要对应 RX560)应该具有 1024 个流处理器(Stream Processor,SP),但在芯片制造的过程中,因良品率的关系产生了部分晶体管损坏的芯片,AMD 决定屏蔽损坏的部分,削减规格推出减配版本,于是 RX560D(896SP)和 RX550(640SP)就这么做出来了,AMD 历史上的很多产品都采用了这种操作。由于 RX560D 和 RX560 共用同一款 GPU 芯片(Polaris21/Baffin),所以部分 RX560D 可以通过“开核”来解锁本应被屏蔽的那部分晶体管,免费提升性能,也因此开核有一定的失败率。这个骚操作让 AMD 收回了成本,玩家得到了开盲盒的快乐,“开核”成功就是免费升级,大家都 Happy。
市面上的 RX550 有 Lexa,Baffin 和 Polaris 三种核心。其中 Polaris 是最少见的,笔者仅见过蓝宝石的一款;其次是 Baffin,这个比 Polaris 多,但也比较少见;到 2021 年以后,市面上日常出售的 RX550 有九成是 Lexa 核心,这款核心满血状态是 640SP,但目前常见款只有 512SP,整体规格也是入门级(128bit 带宽 + 2GB 显存)。
各个核心的技术规格,可以到 TechPowerUP 网站查看,信息非常全:
在矿潮的今天,有很多玩家卖掉了手里的中高端显卡(矿老板给的实在太多了.jpg),也有很多配了新机器苦等几月买不到心水显卡的玩家。这种情形下购买一款因无法挖矿而价格上涨不多,也能轻松买到的入门级显卡成为很多人的选择。
那么问题来了,AMD 不单单削减了上述变种卡的规格,还顺手赋予了它们一个全新的设备 ID。使用新设备 ID 在 Windows 中没有任何影响,因为 Windows 的显卡驱动由 AMD 控制和发布,而 macOS 驱动由苹果公司控制,AMD 不需要向苹果提交新设备的驱动,因为苹果自家的产品集成度非常高,并且除 Mac Pro 产品线之外的型号,显卡通常不能更换,是直接焊在主板上的,在整个产品生命周期中,基本没有更新驱动的理由。
以上,就是问题的前因后果。
确定设备 ID
查找和确定设备 ID 分为两个部分,第一个部分是确定你自己的设备 ID,第二个部分是确认 macOS 最接近的设备 ID。
你的设备 ID
Windows 平台使用 GPU-Z,或在设备管理器中查看;macOS 平台下,点击系统信息报告即可
设备 ID 一般以以下的形式出现:
- 0x3E9B8086
- 0x67DF1002
- 0x13C010DE
0x 指的是十六进制;最后四位是供应商 ID(Vendor ID),Intel 是 8086;AMD/ATI 是 1002;NVIDIA 是 10DE;中间四位是确切的设备 ID,是我们需要的信息。
各家供应商的 PCI 设备 ID 信息可以通过以下几个数据库网站查询:
经过查询和确认,我们得到 RX550 512SP 的设备 ID 是 0x699F1002 ,这个设备 ID 对应的是 Radeon RX 540/540X/550/550X 。
macOS 支持的设备 ID
macOS 支持的设备 ID 可以从 macOS 的 /System/Library/Extensions/ 目录以下系统文件中查找:
- AMD7000Controller.kext: HD7XX0、R7 2XX、R9 2XX
- AMD8000Controller.kext: HD7XX0、R9 2XX、R7 3XX
- AMD9000Controller.kext: R9 2XX、R9 3XX
- AMD9500Controller.kext: WX4100/5100/7100、RX 460/470/480/550/560/570/580/590
- AMD10000Controller.kext: WX8100/9100、RX Vega 56/64
- AMDRadeonX5000.kext: Radeon VII
- AMDRadeonX6000.kext: W5500/5700、RX5500/5600/5700/XT、RX6800/6800XT/6900XT
或者,也可以从黑苹果星球整理好的表单中查找:
经过查询和确认,我们得到最接近 RX 550 512SP 的设备 ID 是 0x67FF1002,这个设备 ID 对应的是 Radeon RX550 640SP / RX560/560X 。
设备属性注入法
确定了设备 ID,下一步就是如何注入。方法一是通过 OpenCore/Clover 的注入设备属性(DeviceProperties)功能来仿冒,通过向指定的 PCI 路径为设备注入一些属性,达到仿冒设备 ID 以获得驱动的效果。下面是 RX550 512SP 仿冒 RX550 640SP 的例子:
<key>PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)</key>
<dict>
<key>device-id</key>
<data>/2cAAA==</data>
<key>model</key>
<string>Radeon RX 550</string>
</dict>
注入的方法比较简单,在 config.plist 中添加以上内容就可以,ProperTree 用户确认自己的 Pci 路径后可直接复制粘贴。不明白的,看下面详细步骤:
保存,重启即可生效。声卡,网卡的仿冒操作也是同理。
SSDT 方法
相比设备属性注入方法,SSDT 方法具有更高的执行优先级,整体稳定性和效率也要更高,但是使用起来有一点技术门槛。
首先第一步还是确定设备的路径,这里介绍 Windows 设备管理器和 IORegistryExplorer.app 两种查找方法,哪个对你来说方便,选哪个就行。
Windows 设备路径查找方法
进入 Windows 10,按下 Win + X 组合键,在弹出的菜单中打开“设备管理器”。找到你的独显,右键选择“属性”,然后切换到“详细信息”选项卡,在属性框中找到“位置路径”,如下图:
其中第二行的:
ACPI(_SB)#ACPI(PCI0)#ACPI(PEG1)#ACPI(PEGP)
这个部分就是我们需要的设备路径。另外,如果能直接在“属性”中找到“BIOS 设备名称”就更好了:
这里的 BIOS 设备路径是可以直接使用的 ACPI 路径。如果你的只有第一种,去掉其中的 #ACPI 和 括号,然后以英文 . 连接起来:
_SB.PCI0.PEG1.PEGP
保存下来,下面介绍如何使用。
macOS 设备路径查找方法
通常,我们使用 IORegistryExplorer.app 在 macOS 中来完成查找操作,但这个软件只支持 10.14 及以上的系统,所以使用 10.13.6 的同学只能使用 Windows 方法或自行转换 PCI 路径。
如图,将路径中带 @ 符号的部分组合起来,即可得到设备路径,但由于 WhateverGreen.kext 会自动将独显修改为 GFX0,导致最终路径会不准确。
将提取到的路径信息保存下来,下面介绍如何使用。
修改预编译的 SSDT
接下来需要使用 MaciASL.app ,这是一款用来编译 dsl 和 aml 文件的编译工具。使用软件打开黑苹果星球整理好的 .dsl 文件(注意看文件包说明选择文件)将你在上一步中得到的路径替换下图中所示的位置:
添加到引导工具
「注意」这里只是举例说明,不用照抄文件名。Clover 比较简单,先说 Clover。直接把文件放到以下路径:
- /EFI/Clover/ACPI/Patched/
重启即可见效。
OpenCore 用户把文件放到以下路径:
- /EFI/OC/ACPI/
然后编辑 config 文件,把文件添加到 ACPI 部分,并启用,见下图:
如果是 ProperTree,如下图:
保存重启见效。
效果验证
说实话笔者没有亲自验证过 RX550 512SP 经过仿冒后是否完完全全可以正常使用,不过,咱们交流群里给力的群友 @丿木子丶丶 已经亲自测试过,表示一切正常。
需仿冒的显卡和 ID
这里简单整理一下需要仿冒的显卡型号以及要仿冒的设备 ID,并未全部验证过,欢迎反馈。
最后,部分显卡也有其它解法,例如 RX580 2048SP 和 RX590 GME,可以刷 VBIOS 变回直接免驱的型号。这个部分可参考「RX580 2048SP刷VBIOS恢复macOS免驱的方法」。
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,联系:admin#heipg.cn,或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:admin#heipg.cn,我们将第一时间配合处理!
黑苹果星球 » 如何仿冒显卡设备ID以驱动显卡?
580 2048sp仿冒好以后没有metal支持(还是可卡) 其他的都显示正常了这种是什么问题?
2048sp版本仿冒没有用,必须重新刷VBIOS,刷成570
我6900xt极光版亮不了,跑v之后就黑屏,啥都没有
无论是在occ修改设备id还是注入ssdt,显卡仿冒id都不生效,系统报告中还是原来的设备id,只有model能生效,我开始怀疑是不是我用的引导软件的问题了。
不错的材料,谢谢提供
AMD RX6600,算是免驱的吗?还需要仿冒吗?
这个型号是免驱的
人入手了一张矿MI50刷镭PRO7的BIOS显卡。在黑苹果中用FCPX剪辑,基本上不工作效率比VEGA56还低。且显示VEGA 16G,有冻屏现象。想跟大佬你学习,看一下能不能仿冒成镭7,使系统识别,以提高效率性能。感 谢,!麻烦你有空回复一下,谢谢!
本人是Radeon PRO VII 想仿冒成 Radeon VII 使用 。Radeon PRO VII也是免驱,但性能还不如VEGA 56、同样架构。听说Radeon PRO VII 苹果支持比较好一点。请问理论上可以吗?一个设备ID:0x66AF1002 一个是 0x66A11002 。同架构同类型的显卡。就好比不刷BIOS,VEGA56 用原生BIOS 仿冒VEGA64使用。请问我这种方法,可提高。显卡在黑果系统中的效率性能吗?
你应该先试一下注入SMU信息
VII是vega20架构,理论上应该比vega64/56都要强一些
就是不清楚Pro VII是不是在硬件规格方面有删减?
使用设备属性方法,显卡名字变了,显存7mb,IOREG里看device-id还是原来的