LINUX.ORG.RU

Qemu и проброс USB

 ,


1

3

Есть USB-ЦАП/АЦП и софтина к нему, под онтопиком ни то, ни другое не работает. Софтина шибко проприетарная, защищена HASP ключом. Я пытаюсь заставить всё это работать в виртуалке. Собственно, девайсы:

Bus 003 Device 011: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 003 Device 010: ID 16b2:1001
ls -l /dev/bus/usb/003
...
crw-rw-r-- 1 root qemu 189, 265 дек 22 18:29 010
crw-rw-rw- 1 root qemu 189, 266 дек 22 18:29 011
Пользователь добавлен в группу qemu.
Команда запуска qemu:
qemu-system-x86_64 \
    -enable-kvm \
    -m 2G \
    -device usb-ehci,id=usb,bus=pci.0,addr=0x4 \
        --device usb-host,vendorid=0x16b2,productid=0x1001 \ # USB-девайс, ради которого весь сыр-бор
    -device piix3-usb-uhci,id=usb1,bus=pci.0,addr=0x5 \
        --device usb-host,vendorid=0x0529,productid=0x0001 \ # USB-HASP
    -usbdevice tablet \
    -net nic \
    -net bridge,br=br0 \
    -vga qxl \
    -spice port=5930,disable-ticketing \
    -device virtio-serial-pci \
    -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
    -chardev spicevmc,id=spicechannel0,name=vdagent \
    -drive file=/mnt/data/win-patch.img,if=virtio
Проблема: оба девайса в госте видны, но не работают. ЦАП/АЦП должен определяться как USB носитель, так он и определяется, но как-то не совсем. Дрова на HASP ключ в гостя поставил, но софтина его всё равно не видит. ЧЯДНТ?

★★★★★

Ответ на: комментарий от King_Carlo

У меня до этого был другой АЦП/ЦАП, от National Instruments. Он в виртуалку пробрасывался и работал, но только вот так, с прямым маппингом физического девайса.

Axon ★★★★★ ()
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от King_Carlo

Попробовал так:

qemu-system-x86_64 \
    -enable-kvm \
    -m 2G \
    -usb -usbdevice host:16b2:1001 \
    -usb -usbdevice host:0529:0001 \
    -usbdevice tablet \
    -net nic \
    -net bridge,br=br0 \
    -vga qxl \
    -spice port=5930,disable-ticketing \
    -device virtio-serial-pci \
    -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
    -chardev spicevmc,id=spicechannel0,name=vdagent \
    -drive file=/mnt/data/win-patch.img,if=virtio
Виртуалка виснет в биосе. Если убрать первый девайс (16b2:1001), то загрузка идёт и ключ работает. Ok, как теперь заставить работать сам АЦП/ЦАП?

Axon ★★★★★ ()
Ответ на: комментарий от Eddy_Em

qemu же жутко тормозной

В какой вселенной?

Не лучше ли VirtualBox?

Предыдущий АЦП у меня в виртаулбокс не пробрасывался, только в qemu.

Axon ★★★★★ ()
Ответ на: комментарий от Axon

Так. Если девайс отключить, запустить виртуалку с -usb -usbdevice host:16b2:1001, а потом подключить его обратно, то ничего не виснет, но результат такой же, как и с моим вариантом. ЧЗХ?

Axon ★★★★★ ()
Ответ на: комментарий от King_Carlo

Попробуй прокинуть не сам девайс, а root hub в котором нужный usb-разъём

Видел как такое советуют, но способ так и не нагуглил. Как это сделать?

Axon ★★★★★ ()
Ответ на: комментарий от King_Carlo

Это который

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
? Если так, то его проброс вообще ничего не даёт. Правда, например, мышка, которая у меня к нему же подключена, от хоста не отваливается. Похоже, что проброс почему-то не работает.

Axon ★★★★★ ()
Ответ на: комментарий от Axon

на archlinux-м форуме пипл через vfio-pci usb-контроллеры кидает, попробуй:


USB:
Its also possible to passthrough a usb controller, in my case an ASMEDIA USB3 Controller:
lspci
04:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
05:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
06:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
Bind them to vfio:
vfio-bind 0000:04:00.0 0000:05:00.0 0000:06:00.0
Pass them to the vm:
-device vfio-pci,host=04:00.0 \
-device vfio-pci,host=05:00.0 \
-device vfio-pci,host=06:00.0

Это может сработать, только если процессор vt-d поддерживает.

King_Carlo ★★★★★ ()
Последнее исправление: King_Carlo (всего исправлений: 1)
Ответ на: комментарий от King_Carlo

Делаю как там пишут, получаю vfio: error no iommu_group for device. Пишу конфиг загрузки модуля с указанием PCI ID всех контроллеров, собираю initcpio со всеми нужными модулями, ребутаюсь, ничего не меняется...

Axon ★★★★★ ()
Ответ на: комментарий от Eddy_Em

И эти люди работают в обсер-ватории.

anonymous ()
Ответ на: комментарий от Axon

Надо ядро грузить с параметром intel_iommu=on для интеля и iommu=1 iommu=pt для амд. Но и чипсет и сама мать должны поддерживать vt-d(iommu) для интеля(amd). Без неё pci-устройство ты не пробросишь.

anonymous ()

А qemu какой чипсет по умолчанию эмулирует? Может, стоит попробовать указать q35(-M q35 вроде)?

anonymous ()
Ответ на: комментарий от anonymous

Надо ядро грузить с параметром intel_iommu=on для интеля и iommu=1 iommu=pt для амд.

Intel, флаги при загрузке:

ntel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1
Но и чипсет и сама мать должны поддерживать vt-d(iommu) для интеля(amd). Без неё pci-устройство ты не пробросишь.
Asrock B85M. Вроде, должна поддерживать.

Axon ★★★★★ ()
Ответ на: комментарий от anonymous

А qemu какой чипсет по умолчанию эмулирует? Может, стоит попробовать указать q35(-M q35 вроде)?

Yeah, baby! Заработало! Окончательный вариант строки запуска:

qemu-system-x86_64 \
    -enable-kvm \
    -M q35 \
    -m 2G \
    -usb -usbdevice host:16b2:1001 \
    -usb -usbdevice host:0529:0001 \
    -usbdevice tablet \
    -net nic \
    -net bridge,br=br0 \
    -vga qxl \
    -spice port=5930,disable-ticketing \
    -device virtio-serial-pci \
    -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
    -chardev spicevmc,id=spicechannel0,name=vdagent \
    -drive file=/mnt/data/win-patch.img,if=virtio
Огромное спасибо, о годный анонимус. Но почему? Каким образом указание эмулируемого чипсета помогло?

Axon ★★★★★ ()
Ответ на: комментарий от Axon

А хрен его знает. Что-то связано с архитектурой чипсета или реализацией, полагаю. http://wiki.qemu.org/Features/Q35

Я припоминаю, что с дефолтным вариантом у меня мышь logitech с родным софтом не работала, но потом всё ок и с g600 и g13. Но это было в самом начале экспериментов с пробросами. Тогда с pci-stub не сложилось и я перешел на vfio, а в гайдах везде советовали q35. И проблем с usb больше не было.

PS А у тебя в /sys/kernel/iommu_groups что-нибудь есть? Скорее всего ты в биосе не включил поддержку vt-d. Или пытался что-то неподходящее пробросить.

anonymous ()
Ответ на: комментарий от anonymous

PS А у тебя в /sys/kernel/iommu_groups что-нибудь есть?

Нет. Но это уже не актуально, так как всё заработало через проброс отдельных USB девайсов, и необходимость возиться с целым контроллером отпала.

Axon ★★★★★ ()
Ответ на: комментарий от anonymous

мне больше что-то кажется, что у него просто плата с говно H-B чипом, там бывают такие проблемы.

erzented ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.