如何更改系統中顯卡的 PCI 設備 ID?(在 GeForce 上安裝 Quadro 驅動程序)
我有一個消費者 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。但這會限制您的可用性並導致虛擬機的性能損失。