阻止 Radeon 驅動程式連接到特定 PCI 裝置?

阻止 Radeon 驅動程式連接到特定 PCI 裝置?

我這台機器上有兩張 Radeon 卡,一張Radeon HD 6570和一個Radeon HD 6950:

lspci | grep VGA

01:00.0 VGA 相容控制器:Advanced Micro Devices [AMD] nee ATI Turks [Radeon HD 6570]
02:00.0 VGA 相容控制器:Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950]

我正在嘗試使用 VGA 直通鍵盤虛擬機Debian 7(喘息),透過 6950 作為 Windows 7 用戶端的輔助顯示卡。如果我radeon通過將內核模組列入黑名單,則效果很好/etc/modprobe.d/

如果我刪除黑名單來運行X11(甚至只是一個知識管理系統控制台)在 6570 上,該radeon模組似乎連接到兩個都牌:

dmesg | egrep "01:00.0|02:00.0|radeon"

pci 0000:01:00.0:[1002:6759]類型0類0x000300
pci 0000:01:00.0:reg 10:[mem 0xe0000000-0xefffffff 64位首選項] pci
0000:01:00.0:reg 18:[mem 0xf7e20 000 -0xf7e3ffff 64 位]
pci 0000:01:00.0: reg 20: [io 0xe000-0xe0ff] pci 0000 :
01:00.0: reg 30: [mem 0xf7e0000-00. ci 0000 :02: 00 。0xf7d3ffff 64 位] PCI 0000:02: 00.0:reg 20:[io 0xd000-0xd0ff] pci 0000 : 02:00.0:reg 30:[mem 0xf7d00000-0fffx b :新增裝置:PCI:0000:01:00.0 ,decodes=io+mem,owns=io+mem,locks=none vgaarb: 新增裝置: PCI:0000:02:00.0,decodes=io+mem,owns=none,locks= none vgaarb: 橋接控制可能 0000:02 :00.0 vgaarb: 可以進行橋接控制 0000:01:00.0 pci 0000:01:00.0: 啟動視訊裝置 [drm] radeon 核心模式設定已啟用。 radeon 0000:01:00.0: 將延遲計時器設定為 64 radeon 0000:01:00.0: VRAM: 1024M 0x000000000000000 - 0x000000003FFFFF (000002000 - 0x0000000003 M 0x0 000000040000000 - 0x000000005FFFFFFF [drm] radeon: 1024M VRAM記憶體就緒 [drm] radeon:512M 的 GTT 記憶體就緒。 radeon 0000:01:00.0:MSI/MSI-X 的 irq 46 radeon 0000:01:00.0:radeon:使用 MSI。 [drm] radeon:irq 初始化。 radeon 0000:01:00.0: WB 已啟用 [drm] radeon: ib 池已準備就緒。 [drm] radeon:電源管理初始化 fbcon:radeondrmfb (fb0) 是主設備 fb0:radeondrmfb 幀緩衝設備 [drm] 初始化 radeon 2.12.0 20080528,在次要 0 radeon 0000:02:00.0 上為1:000:0 :啟用裝置(0000 -> 0003) radeon 0000:02:00.0: 將延遲計時器設定為 64 radeon 0000:02:00.0: VRAM: 2048M 0x000000000000000 0: 02:00.0 : GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF [DRM ] radeon:2048M 的 VRAM 記憶體已準備好 [drm] radeon:512M 的 GTT 記憶體已準備好。 radeon 0000:02:00.0:MSI/MSI-X 的 irq 49 radeon 0000:02:00.0:radeon:使用 MSI。 [drm] radeon:irq 初始化。 radeon 0000:02:00.0: WB 已啟用 [drm] radeon: ib 池已準備就緒。 [drm] radeon:電源管理已初始化 fb1:radeondrmfb 幀緩衝設備 [drm] 在次要 1 上為 0000:02:00.0 初始化了 radeon 2.12.0 20080528









































[drm] radeon:整理設備。
radeon 0000:02:00.0: ffff88041a941800 unpin 不需要
[drm] radeon: ttm 最終確定
pci-stub 0000:02:00.0: 由存根宣告
pci-stub 0000:02:00.00:02:000:0:00 的

這會導致 Windows 7 VM 在啟動時出現藍色畫面。

如何配置才能使模組radeon僅連接到 6570 而不是 6950?

答案1

我曾經有過一些pci_stub相關線路但在我的rc.local啟動過程中這顯然太晚了,無法提供幫助,在radeon開始擺弄東西後運行。

我透過將pci_stub內核模組內容移至以下位置來修復問題initramfs

  1. lspci -nn | grep Cayman尋找vendor:device6950 及其 HDMI 連接埠的編號(位於該行的最後):

    02:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950] [1002:6719]
    02:00.1 Audio device [0403]: Advanced Micro Devices [AMD] nee ATI Cayman/Antilles HDMI Audio [Radeon HD 6900 Series] [1002:aa80]
    
  2. 彈出/etc/initramfs-tools/modules並新增新行:

    pci_stub ids=1002:6719,1002:aa80
    
  3. 重建initramfs

    sudo update-initramfs -u
    
  4. 重新啟動並觀察pci_stub擊敗radeon

    dmesg | egrep "pci-stub|radeon"
    
    pci-stub: add 1002:6719 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.0: claimed by stub
    pci-stub: add 1002:AA80 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.1: claimed by stub
    [drm] radeon kernel modesetting enabled.
    radeon 0000:01:00.0: setting latency timer to 64
    radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M used)
    radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
    
  5. 享受無藍螢幕 VGA 直通!

答案2

使用 genpfault 答案作為參考,我創建了另一個答案,我認為更簡單。

第一步與上面相同:

然後我創建了一個名為 /lib/modprobe.d/pci-stub.conf 的文件,其中我找到了參數:

options pci-stub ids=1002:9715,1002:970f

然後我使用 softdep 建立了一個名為 /lib/modprobe.d/drm.conf 的檔案:

softdep drm pre: pci-stub

這樣,當引導過程嘗試加載 drm 時,首先加載 pci-stub,它保留一個視頻卡的硬件,並防止 drm 附加到某些設備。

稍後您可以刪除 rc.local 中的保留modprobe -r pci-stub

您可以選擇modprobe another-module為該卡載入另一個模組。

相關內容