Paso a través de Qemu USB (invitado de Windows)

15

Tengo un USB ADC / DAC y un sistema de adquisición de datos patentado protegido por HASP para él, los cuales no funcionan en Linux. Estoy tratando de hacerlo funcionar en la máquina virtual de Windows usando qemu. Aquí están los dispositivos:

$ 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

Mi usuario es miembro del grupo qemu. Línea de comando 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 \ # 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

El problema es que ambos dispositivos se muestran en el invitado, pero no funcionan. ADC / DAC debe identificarse como una unidad de bloqueo USB, y se muestra como una en la lista de dispositivos, pero no funciona. He instalado controladores HASP para mi dongle en el sistema invitado, pero el software DAS no lo reconoce. ¿Qué estoy haciendo mal? Captura de pantalla de invitado de Windows

Axon
fuente

Respuestas:

21

Finalmente obtuve ayuda en el otro foro. El problema parece ser con la implementación del bus USB en el chipset I440FX que es emulado por qemu por defecto (detalles aquí ). La solución alternativa es emular el chipset ICH9. Esto se hace agregando -M q35parámetros. También cambié la forma en que se especifican los dispositivos USB y la línea de comando final se ve así:

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

Todo funciona perfectamente ahora.


Actualización para 2019: la usb-deviceopción quedó en desuso; puede lograr lo mismo al reemplazarlo -usb -devicey especificar la identificación del producto y el proveedor en números hexadecimales, de la misma manera:

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

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

Axon
fuente