Qemu USB Passthrough (Windows Gast)

15

Ich habe einen USB ADC / DAC und ein HASP-geschütztes proprietäres Datenerfassungssystem dafür, die beide nicht unter Linux funktionieren. Ich versuche, es mit qemu in einer virtuellen Windows-Maschine zum Laufen zu bringen. Hier sind die Geräte:

$ lsusb
...
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

Mein Benutzer ist Mitglied der Gruppe qemu. Qemu-Befehlszeile:

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 \ # ADC/DAC
    -device piix3-usb-uhci,id=usb1,bus=pci.0,addr=0x5 \
        --device usb-host,vendorid=0x0529,productid=0x0001 \ # 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

Das Problem ist, dass beide Geräte im Gast angezeigt werden, aber nicht funktionieren. ADC / DAC sollte als USB-Blocklaufwerk identifiziert werden und wird als eines in der Geräteliste angezeigt, funktioniert jedoch nicht. Ich habe HASP-Treiber für meinen Dongle auf dem Gastsystem installiert, aber die DAS-Software erkennt sie nicht. Was mache ich falsch? Windows-Gast-Screenshot

Axon
quelle

Antworten:

21

Ich habe endlich Hilfe im anderen Forum bekommen. Das Problem scheint in der USB-Bus-Implementierung im I440FX-Chipsatz zu liegen, die standardmäßig von qemu emuliert wird (Details hier ). Die Problemumgehung emuliert stattdessen den ICH9-Chipsatz. Dies erfolgt durch Hinzufügen von -M q35Parametern. Ich habe auch die Art und Weise geändert, in der die USB-Geräte angegeben werden und die endgültige Befehlszeile wie folgt aussieht:

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

Alles funktioniert jetzt perfekt.


Update für 2019: Die usb-deviceOption wurde abgelehnt. Sie können dasselbe erreichen, indem Sie es durch eine -usb -devicehexadezimale Produkt- und Lieferanten-ID ersetzen und diese angeben.

qemu-system-x86_64 \
    -enable-kvm \
    -M q35 \
    -m 2G \
    -usb -device usb-host:productid=0x16b2,vendorid=0x1001 \
    -usb -device usb-host:productid=0x0529,vendorid=0x0001 \
    -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

Referenz: https://git.qemu.org/?p=qemu.git;a=blob_plain;f=docs/usb2.txt;hb=HEAD

Axon
quelle