У меня в этой машине две карты Radeon,Радеон HD 6570и аРадеон 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 passthroughКВМнаДебиан 7(Wheezy), пропуская 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 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: регистр 10: [mem 0xd0000000-0xdffffff 64bit pref]
pci 0000:02:00.0: регистр 18: [mem 0xf7d20000-0xf7d3ffff 64bit]
pci 0000:02:00.0: регистр 20: [io 0xd000-0xd0ff]
pci 0000:02:00.0: регистр 30: [mem 0xf7d00000-0xf7d1ffff pref]
pci 0000:02:00.0: поддерживает D1 D2
vgaarb: добавлено устройство: 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 0x0000000000000000 - 0x000000003FFFFFFF (использовано 1024M)
radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: готово 1024M памяти VRAM
[drm] radeon: готово 512M памяти GTT.
radeon 0000:01:00.0: irq 46 для MSI/MSI-X
radeon 0000:01:00.0: radeon: используется MSI.
[drm] radeon: irq инициализирован.
radeon 0000:01:00.0: WB включен
[drm] radeon: ib pool готов.
[drm] radeon: инициализировано управление питанием
fbcon: radeondrmfb (fb0) является основным устройством
fb0: устройство буфера кадров radeondrmfb
[drm] Инициализированный radeon 2.12.0 20080528 для 0000:01:00.0 на второстепенном 0
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: 2048 МБ памяти VRAM готовы
[drm] radeon: 512 МБ памяти GTT готовы.
radeon 0000:02:00.0: irq 49 для MSI/MSI-X
radeon 0000:02:00.0: radeon: используется MSI.
[drm] radeon: irq инициализирован.
radeon 0000:02:00.0: WB включен
[drm] radeon: ib pool готов.
[drm] radeon: управление питанием инициализировано
fb1: radeondrmfb устройство буфера кадров
[drm] Инициализирован radeon 2.12.0 20080528 для 0000:02:00.0 на младшем 1
[drm] radeon: завершающее устройство.
radeon 0000:02:00.0: ffff88041a941800 отсоединение не требуется
[drm] radeon: ttm завершено
pci-stub 0000:02:00.0: заявлено stub
pci-stub 0000:02:00.0: irq 49 для MSI/MSI-X
Это приводит к появлению синего экрана при загрузке виртуальной машины Windows 7.
Как настроить так, чтобы модуль radeon
подключался только к 6570, а не к 6950?
решение1
У меня были некоторыеpci_stub
-связанные линиипо-моему rc.local
, это было, по-видимому, слишком поздно в процессе загрузки, чтобы помочь, запустившись после того, как radeon
начал возиться с вещами.
Я исправил ситуацию, переместив pci_stub
модуль ядра в initramfs
:
lspci -nn | grep Cayman
чтобы найтиvendor:device
цифры (в самом конце строки) для 6950 и его порта 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]
Откройте
/etc/initramfs-tools/modules
и добавьте новую строку:pci_stub ids=1002:6719,1002:aa80
Перестроить
initramfs
:sudo update-initramfs -u
Перезагрузитесь и наблюдайте
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
Наслаждайтесь VGA-передачей без синего экрана!
решение2
Используя ответ genpfault в качестве справочного материала, я создал другой ответ, который, на мой взгляд, более прост.
Первый шаг такой же, как описано выше:
Затем я создал файл /lib/modprobe.d/pci-stub.conf с найденными мной аргументами:
options pci-stub ids=1002:9715,1002:970f
Затем я создал файл /lib/modprobe.d/drm.conf с softdep:
softdep drm pre: pci-stub
Таким образом, когда процесс загрузки пытается загрузить DRM, сначала загружается PCI-stub, который резервирует аппаратное обеспечение одной видеокарты и не позволяет DRM подключиться к какому-либо устройству.
Позже вы можете удалить резервирование в rc.local, modprobe -r pci-stub
.
При желании вы можете загрузить другой модуль modprobe another-module
для этой карты.