# 重命名GPU (SSDT-GPU-SPOOF)

因此,这主要是针对那些因其名称而不被原生支持的GPU所需要的,最常见的是:

  • R9 290/390
  • R9 280/380
  • R7 270/370
  • R9 260/360
  • R7 250
  • R7 240

相反,这些GPU需要被 "欺骗 "或伪造成与它们密切相关的型号,通常这将是该卡的 "X "变体。由于某些原因,苹果公司从来没有为这些其他的卡添加PCI ID,即使它们的GPU核心被驱动程序所支持。

所以要欺骗GPU,我们需要找到一些东西。

# 找到一个合适的PCI ID

# 网络

为了找到一个合适的PCI ID,我们将使用PCI ID Repository (opens new window),它有一个所有AMD GPU的完整数据库。在这个例子中,我们将为R9 390创建一个欺骗性的SSDT。关于支持的GPU的完整列表,请参见GPU购买指南 (opens new window)。与该GPU最接近的是390X,在该网站的顶部附近寻找,我们得到了这个结果:

Vendor 1002 -> Device 1002:67b0

现在让我们把它分解成一个我们可以使用的设备ID。

  • 1002: 供应商的ID,所有AMD设备都有这个ID。
  • 67B0: 设备ID,这就是我们关心的东西

那么,我们如何将其转换为一个假的ID?好吧,假ID的格式:

"device-id",
Buffer (0x04)
{
     0xB0, 0x67, 0x00, 0x00
},

正如你所看到的,这些字节是成对互换的。当我们制作我们的SSDT时,请记住这一点。

具体情况来自Endianness (opens new window)的原因,对于那些好奇的人来说

# Linux

如果你能运行Linux,使用命令lspci -vmmnnD -d 1002::0300

$ lspci -vmmnnD -d 1002::0300
Slot: 0000:01:00.0
Class: VGA compatible controller [0300]
Vendor: Advanced Micro Devices, Inc. [AMD/ATI] [1002]
Device: Oland [Radeon HD 8570 / R7 240/340 / Radeon 520 OEM] [6611]
SVendor: Micro-Star International Co., Ltd. [MSI] [1462]
SDevice: Device [3740]
Rev: 87

你可以很容易地得到

  • 插槽ID 0000:01:00.0,我们以后需要它
  • 供应商ID 1002,所有AMD设备都有这个ID
  • 设备ID 6611,这是我们关心的
  • 设备名称 Radeon HD 8570 / R7 240/340 / Radeon 520 OEM,主要是外观

# 找到GPU的ACPI路径

# Windows

要找到GPU的PCI路径是相当简单的,最好的方法是运行Windows:

  • 打开设备管理器
  • 选择显示适配器,然后右击你的GPU并选择属性
  • 在 "详细信息 "标签下,搜索 "位置路径"
    • 注意一些GPU可能隐藏在 "BIOS设备名称 "下

Credit to 1Revenger1 for the image

第二个 "ACPI "是我们所关心的。

ACPI(_SB_)#ACPI(PC02)#ACPI(BR2A)#ACPI(PEGP)#PCI(0000)#PCI(0000)

现在将其转换为ACPI路径非常简单,去掉#ACPI#PCI(0000)

\_SB_.PC02.BR2A.PEGP

# Linux

将上面找到的SLOTID代入cat /sys/bus/pci/devices/SLOTID/firmware_node/path命令,你会得到

$ cat /sys/bus/pci/devices/0000:01:00.0/firmware_node/path
\_SB_.PC02.BR2A.PEGP

好了! 我们已经找到了我们的ACPI路径,现在我们有了一切,我们准备开始了

# 制作SSDT

开始时,获取我们的SSDT-GPU-SPOOF (opens new window)并将其打开。这里有几件事情需要改变

External (_SB_.PCI0, DeviceObj)
External (_SB_.PCI0.PEG0.PEGP, DeviceObj)

对于我们的例子,我们将改变所有提到的:

  • PCI0改为PC02
  • PEG0改为BR2A

提示:如果你的ACPI路径比例子中的要短一些,这也没有问题。只要确保ACPI路径对你的设备是正确的。

现在,ACPI路径是正确的,我们终于可以应用我们的假ID了!!。

因此,我们要改变的2个部分:

device ID:

"device-id",
Buffer (0x04)
{
    0xB0, 0x67, 0x00, 0x00
},

Model:

"model",
Buffer ()
{
    "AMD Radeon R9 390"
}

device-id将被设置为我们在 "寻找合适的PCI ID "中找到的PCI ID,而model则主要是美化。

# 现在你准备编译SSDT了!