最新公告
  • 限时8元开通会员,全站免费下载立即加入我们
  • 如何仿冒显卡设备ID以驱动显卡?

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

    前言

    开篇要明确的第一点: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 有案例可以参考,比如黑苹果星球一直在整理的

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

    上图中,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 对不上号,导致无法驱动。

    如何仿冒显卡设备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 网站查看,信息非常全:

    • Polaris 21
    • Baffin
    • Lexa

    在矿潮的今天,有很多玩家卖掉了手里的中高端显卡(矿老板给的实在太多了.jpg),也有很多配了新机器苦等几月买不到心水显卡的玩家。这种情形下购买一款因无法挖矿而价格上涨不多,也能轻松买到的入门级显卡成为很多人的选择。

    那么问题来了,AMD 不单单削减了上述变种卡的规格,还顺手赋予了它们一个全新的设备 ID。使用新设备 ID 在 Windows 中没有任何影响,因为 Windows 的显卡驱动由 AMD 控制和发布,而 macOS 驱动由苹果公司控制,AMD 不需要向苹果提交新设备的驱动,因为苹果自家的产品集成度非常高,并且除 Mac Pro 产品线之外的型号,显卡通常不能更换,是直接焊在主板上的,在整个产品生命周期中,基本没有更新驱动的理由。

    以上,就是问题的前因后果。

     

    确定设备 ID

    查找和确定设备 ID 分为两个部分,第一个部分是确定你自己的设备 ID,第二个部分是确认 macOS 最接近的设备 ID。

     

    你的设备 ID

    Windows 平台使用 GPU-Z,或在设备管理器中查看;macOS 平台下,点击系统信息报告即可

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

    设备 ID 一般以以下的形式出现:

    • 0x3E9B8086
    • 0x67DF1002
    • 0x13C010DE

    0x 指的是十六进制;最后四位是供应商 ID(Vendor ID),Intel 是 8086;AMD/ATI 是 1002;NVIDIA 是 10DE;中间四位是确切的设备 ID,是我们需要的信息。

    各家供应商的 PCI 设备 ID 信息可以通过以下几个数据库网站查询:

    • Device Hunt
    • PCI Lookup
    • PCI Devices(推荐)

    经过查询和确认,我们得到 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 路径后可直接复制粘贴。不明白的,看下面详细步骤:

     

    首先从 Hackintool 获取设备的 PCI 路径:

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

    如图所示复制 Device Path。

    然后打开 OpenCore Configurator / Clover Configurator / OpenCoreAuxiliaryTools / ProperTree 编辑器,照图输入:

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

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

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

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

    「注意」最后说明一下 0x67FF1002 是怎么变为 FF670000 的。具体来说是因为“大小端”(Endianness),解释起来太过复杂,感兴趣的同学可前往百度百科或 Wikipedia 查看。

    • 第一步,0x67FF1002 删除前缀 0x,这部分代表十六进制,没有实际意义;
    • 第二步,将 1002 后缀删除,这部分代表供应商 ID(Vendor-ID),在仿冒设备 ID 时没有实际意义;
    • 第三步,剩余值按 大端 → 小端 的形式转换,具体来说就是两个一组分开,然后按从右到左的顺序重新排列,例如: <67 FF> → <FF 67>
    • 最后,补全 8 位,得到 FF670000 。其它设备 ID 以此类推。

     

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

     

    SSDT 方法

    相比设备属性注入方法,SSDT 方法具有更高的执行优先级,整体稳定性和效率也要更高,但是使用起来有一点技术门槛。

    首先第一步还是确定设备的路径,这里介绍 Windows 设备管理器和 IORegistryExplorer.app 两种查找方法,哪个对你来说方便,选哪个就行。

     

    Windows 设备路径查找方法

    进入 Windows 10,按下 Win + X 组合键,在弹出的菜单中打开“设备管理器”。找到你的独显,右键选择“属性”,然后切换到“详细信息”选项卡,在属性框中找到“位置路径”,如下图:

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

    其中第二行的:

    ACPI(_SB)#ACPI(PCI0)#ACPI(PEG1)#ACPI(PEGP)
    

    这个部分就是我们需要的设备路径。另外,如果能直接在“属性”中找到“BIOS 设备名称”就更好了:

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

    这里的 BIOS 设备路径是可以直接使用的 ACPI 路径。如果你的只有第一种,去掉其中的 #ACPI 和 括号,然后以英文 . 连接起来:

    _SB.PCI0.PEG1.PEGP
    

    保存下来,下面介绍如何使用。

     

    macOS 设备路径查找方法

    通常,我们使用 IORegistryExplorer.app 在 macOS 中来完成查找操作,但这个软件只支持 10.14 及以上的系统,所以使用 10.13.6 的同学只能使用 Windows 方法或自行转换 PCI 路径。

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

    如图,将路径中带 @ 符号的部分组合起来,即可得到设备路径,但由于 WhateverGreen.kext 会自动将独显修改为 GFX0,导致最终路径会不准确。

    将提取到的路径信息保存下来,下面介绍如何使用。

     

    修改预编译的 SSDT

    接下来需要使用 MaciASL.app ,这是一款用来编译 dsl 和 aml 文件的编译工具。使用软件打开黑苹果星球整理好的 .dsl 文件(注意看文件包说明选择文件)将你在上一步中得到的路径替换下图中所示的位置:

     

    下载 SSDT-SPOOF-GPU.aml,提取码:8w3u

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

    • 替换的过程中,最重要的一点是一个标点符号都不能错,例如,上图中要替换以下两个位置的路径信息(绿色标注):
      • External (_SB_.PCI0.PEG0.PEGP, DeviceObj)
      • Scope (\_SB.PCI0.PEG0.PEGP)
      • 替换完成后应该如下(仅举例,橙色标注):
      • External (_SB.PCI0.RP17.PXSX, DeviceObj)
      • Scope (\_SB.PCI0.RP17.PXSX)
    • 第二点,关于 0x67FF1002 是怎么变为 FF670000 的。具体来说是因为“大小端”(Endianness),解释起来太过复杂,感兴趣的同学可前往百度百科或 Wikipedia 查看。
      • 第一步,0x67FF1002 删除前缀 0x,这部分代表十六进制,没有实际意义;
      • 第二步,将 1002 后缀删除,这部分代表供应商 ID(Vendor-ID),在仿冒设备 ID 时没有实际意义;
      • 第三步,剩余值按 大端 → 小端 的形式转换,具体来说就是两个一组分开,然后按从右到左的顺序重新排列,例如: <67 FF> → <FF 67>
      • 最后,补全 8 位,得到 FF670000 ,因此 Buffer(0x04) 中的值分别就是 0xFF, 0x67, 0x00, 0x00
      • 其它设备 ID 以此类推。

     

    完成后,点击左上角 文件 → 另存为 → 文件格式选择 ACPI Machine Language Binary ,保存到任意位置,如下图:

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

     

     

    添加到引导工具

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

    • /EFI/Clover/ACPI/Patched/

    重启即可见效。

     

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

    • /EFI/OC/ACPI/

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

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

    如果是 ProperTree,如下图:

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

    保存重启见效。

     

    效果验证

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

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

     

    需仿冒的显卡和 ID

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

     

    • R9 290 / R9 390:建议 0x67B01002
    • R9 280:建议 0x679A1002 或 0x67981002
    • R9 380:建议 0x69381002 或 0x69391002
    • R9 270 / R9 370:建议 0x68101002
    • R7 240 / R7 340:建议 0x682B1002 或 0x665D1002
    • RX 550 512SP:建议 0x67FF1002
    • RX 640 Dell OEM:建议 0x67FF1002
    • RX 580 2048SP:建议 0x67DF1002
    • RX 590 GME:建议 0x67DF1002
    • HD Graphics 4400:建议 0x04128086

     

    最后,部分显卡也有其它解法,例如 RX580 2048SP 和 RX590 GME,可以刷 VBIOS 变回直接免驱的型号。

    欢迎来到黑苹果乐园,助力于黑粉用上黑苹果。
    黑苹果乐园 » 如何仿冒显卡设备ID以驱动显卡?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    站壳网
    一个高级程序员模板开发平台

    发表评论

    • 421会员总数(位)
    • 347资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 564稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    IP Blocking Protection is enabled by IP Address Blocker from LionScripts.com.