web-dev-qa-db-ja.com

Qemu USBパススルー(Windowsゲスト)

USB ADC/DACとHASPで保護された専用のデータ収集システムを持っていますが、どちらもLinuxでは機能しません。私はそれをqemuを使用してWindows仮想マシンで動作させようとしています。ここにデバイスがあります:

$ 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

私のユーザーは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 \ # 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

問題は、両方のデバイスがゲストに表示されているが、機能しないことです。 ADC/DACはUSBブロックドライブとして識別し、デバイスリストに1つとして表示されますが、機能しません。ゲストシステムにドングル用のHASPドライバをインストールしましたが、DASソフトウェアがそれを認識しません。何が悪いのですか? Windows guest screenshot

15
Axon

私は最終的に他のフォーラムで助けを得ました。問題は、デフォルトでqemuによってエミュレートされるI440FXチップセットのUSBバスの実装にあるようです(詳細 ここ )。回避策は、代わりにICH9チップセットをエミュレートすることです。これは、-M q35パラメータを追加することによって行われます。 USBデバイスの指定方法も変更しました。最終的なコマンドラインは次のようになります。

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

すべてが今完璧に動作します。


2019年の更新:usb-deviceオプションは廃止されました。同様に、これを-usb -deviceに置き換えて、製品とベンダーIDを16進数で指定することで同様に実現できます。

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

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

21
Axon