システム内のグラフィックカードのPCIデバイスIDをどのように変更しますか? (GeForceにQuadroドライバをインストール)

システム内のグラフィックカードのPCIデバイスIDをどのように変更しますか? (GeForceにQuadroドライバをインストール)

私は消費者向けGeForce GTX680を使用しています。プロの製品にはQuadro K5000があります。どちらのカードも内部にまったく同じチップ(GK104)があり、ハードウェアもほぼ同じです。

GTX680の公式ドライバはクワッドバッファステレオをサポートしていませんが、K5000の公式ドライバはサポートしています。 GTX680のこれらの「プロ」機能は、GTX680にK5000ドライバをインストールすることでロック解除できます。Windowsでは正常に完了しました。

インストーラがGTX680ではなくK5000であることを認識するように、システム上のカードのPCIデバイスIDをどのように変更しますか?

レジスタ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」を意味し、「K5000」を意味する「11BA」に変更する必要があります。

だから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

ドライバー自体を見てください。利用可能なソースコードがない場合は、16進エディタを使用して問題を解決することもできます。

ただし、ドライバが何らかの方法で署名されている場合、署名は無効になります。

偽のデバイスを作成し、リレー用の偽デバイスを使用して物理デバイスをスタブドライバにバインドすることもできます。これがどれほど簡単かはわかりませんが、良いカーネルレベルのスキルが必要です。カーネル自体に仮想pciデバイスを実装する必要があります。

オプション3は本当に面倒な作業です。仮想マシンを作成し、それを変更して必要なPCI IDを報告し、デバイスを仮想マシンにバインドします。ただし、これにより可用性が制限され、仮想マシンのパフォーマンスが低下します。

答え2

setpci次のコマンドを使用できます。http://linux.die.net/man/8/setpci

setpci --dumpregsを使用して汎用ハードウェアレジスタに関する情報を検索し、setpciを使用して次のいずれかのレジスタを使用してデバイスアドレス(02:00.0)を照会できます。

setpci -s 02:00.0 STATUS

関連情報