나는 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 블록 드라이브로 인식되어 장치 목록에 그 중 하나로 표시되어야 하는데 작동하지 않습니다. 게스트 시스템에 동글용 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