내 시스템에 있는 그래픽 카드의 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

관련 정보