阻止Radeon驱动程序连接到特定的PCI设备?


13

我在这台机器上有两张Radeon卡,即Radeon HD 6570Radeon HD 6950

lspci | grep VGA

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

我正在尝试让VGA直通在Debian 7(Wheezy)上与KVM一起使用,将6950作为辅助视频卡传递给Windows 7来宾。如果我通过将该内核模块列入黑名单,则此方法可以正常工作。radeon/etc/modprobe.d/

如果我删除黑名单以在6570上运行X11(甚至只是KMS控制台),则该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 64bit pref]
pci 0000:01:00.0:reg 18:[mem 0xf7e20000-0xf7e3ffff 64bit ]
pci 0000:01:00.0:reg 20:[io 0xe000-0xe0ff]
pci 0000:01:00.0:reg 30:[mem 0xf7e00000-0xf7e1ffff pref]
pci 0000:01:00.0:支持D1 D2
pci 0000:02:00.0 :[1002:6719]类型0类别0x000300
pci 0000:02:00.0:reg 10:[mem 0xd0000000-0xdfffffff 64bit pref]
pci 0000:02:00.0:reg 18:[mem 0xf7d20000-0xf7d3ffff 64bit]
pci 0000:02: 00.0:reg 20:[io 0xd000-0xd0ff]
pci 0000:02:00.0:reg 30:[mem 0xf7d00000-0xf7d1ffff pref]
pci 0000:02:00.0:支持D1 D2
vgaarb:已添加设备:PCI:0000:01:00.0,decodes = io + mem,owns = io + mem,锁=无
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 0x0000000000000000-0x000000003FFFFFFF(使用1024M)
radeon 0000:01:00.0:GTT:512M 0x0000000040000000-0x000000005FFFFFFF
[drm] radeon:VRAM的1024M内存准备就绪
[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]为次要0
radeon 0000:01:00.0的radeon 2.12.0 20080528初始化radeon 0000:02:00.0:启用设备(0000-> 0003)
radeon 0000:02:00.0:将延迟计时器设置为64
radeon 0000:02:00.0:VRAM:2048M 0x0000000000000000-0x000000007FFFFFFF(使用2048M)
radeon 0000: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.020080528。
[drm] radeon:整理设备。
radeon 0000:02:00.0:ffff88041a941800无需取消固定
[DRM] radeon:ttm最终确定为
pci-stub 0000:02:00.0:由stub
pci-stub声明为0000:02:00.0:MSI / MSI-X的irq 49

这将导致Windows 7 VM在启动时出现蓝屏。

我该如何配置,使模块radeon仅连接6570,而不连接6950?

Answers:


14

我有一些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直通!


3
以上对我不起作用。相反,我pci_stub.ids=1002:6719,1002:aa80在grub配置文件中添加了内核命令行的末尾。我怀疑原因是pci-stub模块在我的设置中内置于内核中。
曼苏尔2014年


5

使用genpfault答案作为参考,我创建了另一个答案,我认为这更简单。

第一步与上面相同:

然后我创建了一个名为/lib/modprobe.d/pci-stub.conf的文件,其中找到了我发现的args:

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为该卡加载另一个模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.