Qemu USB passthrough (tamu windows)

15

Saya memiliki USB ADC / DAC dan sistem akuisisi data yang dilindungi hak milik HASP untuk itu, keduanya tidak bekerja di linux. Saya mencoba membuatnya bekerja di mesin virtual Windows menggunakan qemu. Inilah perangkatnya:

$ 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

Pengguna saya adalah anggota grup qemu. Baris perintah 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

Masalahnya adalah, kedua perangkat ditampilkan di tamu, tetapi tidak berfungsi. ADC / DAC harus diidentifikasi sebagai drive blok USB, dan ditampilkan sebagai salah satu di daftar perangkat, tetapi tidak berfungsi. Saya telah menginstal driver HASP untuk dongle saya di sistem tamu, tetapi perangkat lunak DAS tidak mengenalinya. Apa yang saya lakukan salah? Tangkapan layar tamu Windows

Akson
sumber

Jawaban:

21

Saya akhirnya mendapat bantuan di forum lain. Masalahnya tampaknya dengan implementasi bus USB di chipset I440FX yang ditiru oleh qemu secara default (detail di sini ). Solusinya adalah meniru chipset ICH9 sebagai gantinya. Ini dilakukan dengan menambahkan -M q35parameter. Saya juga mengubah cara perangkat USB ditentukan dan baris perintah akhir terlihat seperti ini:

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

Semuanya berfungsi dengan baik sekarang.


Pembaruan untuk 2019: usb-deviceopsi itu ditinggalkan; Anda dapat mencapai hal yang sama dengan menggantinya dengan -usb -devicedan menentukan id produk dan vendor dalam angka heksadesimal, juga:

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

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

Akson
sumber