Qemu USB 패스스루(Windows 클라이언트)

Qemu USB 패스스루(Windows 클라이언트)

나는 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 소프트웨어가 인식하지 못합니다. 내가 뭘 잘못했나요? Windows 게스트 스크린샷

답변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-device16진수로 제품 및 공급업체 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

관련 정보