Nvidia

如何更改系統中顯卡的 PCI 設備 ID?(在 GeForce 上安裝 Quadro 驅動程序)

  • August 19, 2016

我有一個消費者 GeForce GTX680。它的專業版相當於 Quadro K5000。兩張卡內部的晶片完全相同(GK104),硬體幾乎相同。

GTX680的官方驅動不能做Quad-buffered stereo,但是K5000的那個可以。可以通過在 GTX680 上安裝 K5000 驅動程序來解鎖 GTX680 上的這些“專業”功能。它已在 Windows 上成功完成。 http://www.techarp.com/showarticle.aspx?artno=539&pgno=3

如何更改系統中卡的 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,但它仍然不允許更改驅動程序。

您需要查看驅動程序本身。如果沒有可用的原始碼,您可能會幸運地使用十六進制編輯器進行修補

但是,如果驅動程序以任何方式簽名,這將使簽名無效。

您還可以創建一個假設備並將真實設備綁定到存根驅動程序,使用假設備進行中繼。不能說這肯定有多容易,但它需要體面的核心級技能。您必須在核心本身中實現一個虛擬 pci 設備。

選項三真的很重:創建一個VM,修改它以報告所需的PCI ID並將設備綁定到VM。但這會限制您的可用性並導致虛擬機的性能損失。

引用自:https://unix.stackexchange.com/questions/154952