私はUSB ADC / DACとHASPで保護された独自のデータ収集システムを持っていますが、どちらもLinuxでは動作しません。 Windows仮想マシンで動作するためにqemuを使用しようとしています。デバイスは次のとおりです。
$ 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ソフトウェアが認識しません。私は何が間違っていましたか?
答え1
ついに他のフォーラムで助けられました。この問題は、基本的に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
16進数で製品と仕入先IDに置き換えて指定することで、同じ目的を達成できます。-usb -device
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
答え2
Vendoridとproductidを混同しました。正しい構文は次のとおりです。
-usb -device usb-host,vendorid=0x16b2,productid=0x1001