如何更改系统中显卡的 PCI 设备 ID? (在 GeForce 上安装 Quadro 驱动程序)

如何更改系统中显卡的 PCI 设备 ID? (在 GeForce 上安装 Quadro 驱动程序)

我有一台消费级 GeForce GTX680。它的专业等效产品是 Quadro K5000。两张卡的内部芯片完全相同(GK104),硬件几乎相同。

GTX680 的官方驱动程序无法实现四缓冲立体声,但 K5000 的官方驱动程序可以。通过在GTX680上安装K5000驱动程序,即可解锁GTX680上的这些“专业”功能。它已经在 Windows 上成功完成。

如何更改系统中卡的 PCI 设备 ID,以便安装程序认为它是 K5000,而不是 GTX680?

我需要将寄存器02的值从1180更改为11BA。

lspci | grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 680] (rev a1)

告诉我显卡位于“01:00.0”

setpci --dumpregs
    cap pos w name
         00 W VENDOR_ID
         02 W DEVICE_ID

告诉我 02 对应于设备 ID。要读取寄存器,我会执行以下操作:

sudo setpci -s 01:00.0 02.w
    1180

“1180”表示“GTX680”,我需要将其更改为“11BA”,表示“K5000”

所以我将 1180 更改为 11BA:

sudo setpci -s 01:00.0 02.w=11BA

没有错误,但当我尝试读取我刚刚更改的值时,它仍然显示 1180

sudo setpci -s 01:00.0 02.w
1180

还尝试了与 sudo su 相同的操作(因为有时 sudo 不起作用)

[aaa@bbb ~]$ sudo su
[sudo] password for aaa: 
[root@bbb aaa]# setpci -v -s 01:00.0 DEVICE_ID=11BA
0000:01:00.0 @02 11ba
[root@bbb aaa]# setpci -v -s 01:00.0 DEVICE_ID
0000:01:00.0 @02 = 1180

我知道这个内存无法真正写入,因此这可能只是系统中正在执行的操作,因此不会显示。我尝试安装 Quadro 驱动程序,但它仍然安装 GTX680 驱动程序(无四缓冲功能)

我设法通过更改卡上的电阻来更改卡的设备 ID,但它仍然不允许更改驱动程序。

答案1

您需要查看驱动程序本身。如果没有可用的源代码,您可能会幸运地使用十六进制编辑器进行修补

但是,如果驱动程序以任何方式进行签名,这将使签名无效。

您还可以创建一个假设备并将真实设备绑定到存根驱动程序,使用假设备进行中继。不能肯定这有多容易,但它需要良好的内核级技能。你必须在内核本身中实现一个虚拟 pci 设备。

选项三确实很繁重:创建一个虚拟机,修改它以报告所需的 PCI ID,并将设备绑定到虚拟机。但这会限制您的可用性并导致虚拟机的性能损失。

答案2

您可以使用setpci以下命令:http://linux.die.net/man/8/setpci

使用 setpci --dumpregs 您可以找到有关通用硬件寄存器的信息,然后使用 setpci 查询设备地址 (02:00.0),例如使用以下寄存器之一:

setpci -s 02:00.0 STATUS

相关内容