如何仿冒显卡设备ID以驱动显卡?

前言

最后更新:2021/11/18,修改了 67FF0000 不生效的解决方法。

开篇要明确的第一点: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 路径后可直接复制粘贴。不明白的,看下面详细步骤:

已有114701次阅读

保存,重启即可生效。声卡,网卡的仿冒操作也是同理。

 

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 文件(注意看文件包说明选择文件)将你在上一步中得到的路径替换下图中所示的位置:

已有114701次阅读

 

添加到引导工具

「注意」这里只是举例说明,不用照抄文件名。Clover 比较简单,先说 Clover。直接把文件放到以下路径:

  • /EFI/Clover/ACPI/Patched/

重启即可见效。

 

OpenCore 用户把文件放到以下路径:

  • /EFI/OC/ACPI/

然后编辑 config 文件,把文件添加到 ACPI 部分,并启用,见下图:

如果是 ProperTree,如下图:

保存重启见效。

 

效果验证

说实话笔者没有亲自验证过 RX550 512SP 经过仿冒后是否完完全全可以正常使用,不过,咱们交流群里给力的群友 @丿木子丶丶 已经亲自测试过,表示一切正常。

 

需仿冒的显卡和 ID

这里简单整理一下需要仿冒的显卡型号以及要仿冒的设备 ID,并未全部验证过,欢迎反馈。

已有114701次阅读

最后,部分显卡也有其它解法,例如 RX580 2048SP 和 RX590 GME,可以刷 VBIOS 变回直接免驱的型号。这个部分可参考「RX580 2048SP刷VBIOS恢复macOS免驱的方法」。

 

 

0. 本站所有资源解压密码均为 heipg.cn
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,联系:admin#heipg.cn,或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:admin#heipg.cn,我们将第一时间配合处理!

黑苹果星球 » 如何仿冒显卡设备ID以驱动显卡?

34 评论

  1. 设置device-id可以解决启动黑屏问题吗?我r9 nano理论上是免驱卡,但是我每次启动的时候,5次可能有三次引导结束后直接黑屏。或者是进到了登录画面,输入密码回车后就黑屏。网上太少解决方案了,完全不知道怎么下手

  2. 求教下6650这种怎么仿冒 _SB.PCI0.GPP8.SWUS.SWDS.VGA

    1. 6000系的pci位置确实和之前的5000系不太一样
      你可以用hackintool交叉对比一下
      如果你的卡没有插在第一个pcie口那我就不清楚啦

  3. 求教 6950xt 仿冒ID的话,性能如何?有没有具体的教程? 如果可以,想入一个,现在RX580用的太憋屈

    1. 其实6000系最大的问题是调用率低,这是苹果自身的问题没办法
      我认为6800xt足以
      ——
      教程就是这个教程,原理一样,不同id

      1. 矿卡闹的。我也认为 6800xt是比较合适的。但是目前应该没办法能保证不买到矿卡。 6650XT感觉有点低, 6750XT无法驱动,6950XT感觉7000系出来又会被背刺…… 感觉太难选了….

        1. 不着急的话,可以买一个5700xt先用着,现在也便宜,调用率也不错
          换了新卡还可以留着备用,几百块也不心疼

  4. 仿冒ID 影响显卡性能不?

    1. 多多少少都会有点

  5. Bonaire [FirePro W5100] 可以仿冒哪个ID呢?有没有大佬知道的~

  6. rx550 512sp的驱动后画面非常卡,显示解码器无法工作,有知道怎么处理的吗?用的是ff67

    1. 有核显驱一下,没核显改机型imacpro或macpro
      id不止67FF一个,67DF,67EF都可以试试

  7. r7 260x 有仿冒ID 么

    1. 同款 解决了没有啊

  8. 显卡名不变,显存还是只有7MB

  9. 请教? AMD W8100应该用哪一个仿冒显卡,本是免驱卡,安上后没能识别,用OpenCore设置设备ID后能识别出W8100,但显存只有7MB, 求解?谢谢

    1. 不了解这款专业卡,翻了一下资料,2014年的
      试一下67B0

      1. 仿冒卡要写R9 360X吗?

        1. 白果里有一个HawaiiXT核心,对应R9 390X,设备ID 67B0,具体规格和你这款卡几乎一致,除了显存只有4GB

  10. WIN下怎么操作?我需要仿冒显卡ID,我现在只有WIN11,我看举例的工具都是MAC的。

    1. Windows可以用OCAuxiliaryTools,或Xplist,或者ProperTree,OpenCore的config编辑器这三个有Windows版本,ssdt可以进入到macOS再编辑,因为Windows的编译器标准不一容易编出错误来,实在要用,Xiasl有windows版本,以上软件本站都有下载,或者GitHub

发表回复