我正在使用 启动虚拟机qemu-system-x86_64
。我知道通过 USB 设备的两种方法。
举例来说,我有一只鼠标出现在 lsusb 中,就像
Bus 003 Device 011: ID 6ade:9582 Amazing Mouse Maker
我可以通过使用它
-device usb-host,vendorid=0x6ade,productid=0x9582
或者
-device usb-host,hostbus=3,hostaddr=11
这两个我都不喜欢。如果我通过供应商/产品 ID 获取它,那么在虚拟机关闭之前我将永远无法回收该鼠标。
如果我通过总线和设备号获取它,那么如果我拔掉它,我将不得不告诉 Qemu 重新获取它。
我可以通过端口(实际的物理插槽)发送它吗?假设它已插入总线 3 端口 2。我可以绕过它吗?
答案1
由于某种原因,这没有记录在Qemu 2.12.50 用户文档我必须学习我从中学到的东西这家伙
他们提到:
-device usb-host,hostbus=bus,hostaddr=addr
Pass through the host device identified by bus and addr
-device usb-host,vendorid=vendor,productid=product
Pass through the host device identified by vendor and product ID
但他们没有提到你还可以这样做:
-device usb-host,hostbus=bus,hostport=port
例如...
运行lsusb -t
,我得到:
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
|__ Port 10: Dev 8, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 11: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 12M
我可以决定通过这些:
-device usb-host,hostbus=3,hostport=10 \
-device usb-host,hostbus=3,hostport=11 \
这些对应于物理插槽。
然而,USB 3.0 插槽的总线和端口会有所不同,具体取决于插入的是 USB 2.0 设备还是 USB 3.0 设备,但每个设备的端口将保持一致。
USB 2.0 插槽不存在这种差异。
对于 USB 集线器,使用点来分隔端口。所以如果你有...
/: Bus 03
|__ Port 2: some stuff
|__ Port 1: some stuff
你会使用-device usb-host,hostbus=3,hostport=2.1