前言
开篇要明确的第一点: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 的例子:
注入的方法比较简单,在 config.plist 中添加以上内容就可以,ProperTree 用户确认自己的 Pci 路径后可直接复制粘贴。不明白的,看下面详细步骤:
评论(0)