Qemu USB 패스 스루 (Windows 게스트) 된 독점

나는 리눅스에서 작동하지 않는 USB ADC / DAC와 HASP로 보호 된 독점 데이터 수집 시스템을 가지고 있습니다. 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 블록 드라이브로 식별되어야하며 장치 목록에 하나로 표시되지만 작동하지 않습니다. 게스트 시스템에 동글 용 HASP 드라이버를 설치했지만 DAS 소프트웨어가이를 인식하지 못합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?
Windows 게스트 스크린 샷



답변

나는 다른 포럼에서 마침내 도움을 받았다. 문제는 기본적으로 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과 같이 16 진수로 제품 및 공급 업체 ID를 바꾸고이를 지정 하여 동일한 결과를 얻을 수 있습니다 .

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