Usb

Qemu USB 直通(Windows 訪客)

  • June 5, 2020

我有一個 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 塊驅動器,並在設備列表中顯示為一個,但不起作用。我已在來賓系統上為我的加密狗安裝了 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並以十六進制數字指定產品和供應商 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

引用自:https://unix.stackexchange.com/questions/250938