Исходные данные
Материнская плата H55M-E33(MS-7636)
Процессор Intel® Core™ i5 CPU 650
ОС Linux 3.2.0-43-generic x86_64 Ubuntu 12.04.2 LTS
VirtualBox 4.2.12r84980
Процесс
1 Включаем поддержку IOMMU в ядре. Для этого в файле /etc/default/grub меняю строку
GRUB_CMDLINE_LINUX=""
на
GRUB_CMDLINE_LINUX="intel_iommu=on"
2 Обновляем загрузчик grub
$sudo update-grub
3 После перезагрузки выполням
$dmesg | grep -i -e iommu -e dmar
в выводе должны быть подобные строки:
Intel-IOMMU: enabled
DMAR: DRHD base: 0x000000fed90000 flags: 0x0
IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c9008020e30272 ecap 1000
vboxpci: IOMMU found
Если таких или похожих строк нет, то возможно у вас в биосе отключена Vt-d, либо процессор или материнская плата не поддерживает IOMMU.
4 Проверим, есть ли устройства которые можно пробросить. Если нет строк с FLReset+ тогда вряд ли получится. У меня так:
$ sudo lspci -vv | grep -i flreset+
ExtTag- RBE- FLReset+
5 Если функция есть, то ищем устройства которые можно пробросить. В моей системе нашлость только одно такое PCI устройство 00:1b.0 (встроенный в материнку звуковой чип Intel). Я делал с помощью команды:
$sudo lspci -vv | less
6 Смотрим какой модуль ядра оно использует:
$ lspci -k -s 00:1b
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06) Subsystem: Micro-Star International Co., Ltd. Device 7636
Kernel driver in use:snd-hda-intel
Kernel modules: snd-hda-intel
7 Запрещаем его загрузку, добавив в /etc/modprobe.d/blacklist.conf строку
blacklist snd-hda-intel
и выполним команду
$sudo update-initramfs -u
8 Перегружаем компьютер и пробрасываем устройство в гостевую:
$vboxmanage modifyvm u1204 --pciattach 00:1b.0@01:05.0
При успешном пробросе не должно быть сообщений. 01:05.0 это любой адрес pci устройства, который не занят в гостевой. Согласно документации по virtualbox у гостевой системы должны быть включены в настройках VT-x/AMD-V и nested paging, а на хосте должн быть установлен Oracle VM VirtualBox Extension Pack.
9 Запускаем гостя, смотрим в нем, что устройство появилось:
$lspci -s
01:05 01:05.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)
Итог:
Звуковая карта определилась гостевой ОС и что самое главное заработала, т.е. звук гостевой системы выводится на физическое устройство хоста. В ходе моих экспериментов многие устройства успешно пробрасывались (без FLReset+) и виделись ядром гостя, но работать отказывались. Были случаи, что система хоста зависала, так что будьте осторожны (на этапе 9), если будете повторять. К сожалению GPU и USB пока пробросить не удалось, что является моей конечной целью.
Обновления заметки:
Удалось успешно прокинуть USB хоста, причем я пропускал шаги 6 и 7 .
$lspci | grep USB
00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
Флешка видится и нормально работает. Видеокамера работает показывает несколько секунд, а потом изображение пропадает (mplayer tv:// выдает v4l2: select timeout).
Ссылки:
https://www.virtualbox.org/manual/ch09.html#pcipassthroughhttps://www.virtualbox.org/ticket/5252http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVMhttp://wiki.xensource.com/wiki/VTdHowTohttp://www.intel.com/support/motherboards/desktop/sb/CS-030922.htm?wapkw=%28vt-d%29