我可以通过 qemu 命令行通过 USB 端口吗?

Dee*_*ool 21 kvm usb qemu lsusb

我正在使用qemu-system-x86_64. 我知道通过 USB 设备的两种方法。

比如说,我有一个鼠标出现在 lsusb 中

Bus 003 Device 011: ID 6ade:9582 Amazing Mouse Maker
Run Code Online (Sandbox Code Playgroud)

我可以通过使用

-device usb-host,vendorid=0x6ade,productid=0x9582
Run Code Online (Sandbox Code Playgroud)

或者

-device usb-host,hostbus=3,hostaddr=11
Run Code Online (Sandbox Code Playgroud)

这两个我都不喜欢。如果我通过供应商/产品 ID 抓取它,那么在 VM 关闭之前,我将永远无法收回该鼠标。

如果我通过 BUS 和设备号获取它,那么如果我拔掉它,我将不得不告诉 Qemu 重新获取它。

我可以通过端口(实际的物理插槽)发送它吗?假设它已插入总线 3 端口 2。我可以通过它吗?

Dee*_*ool 27

出于某种原因,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 
Run Code Online (Sandbox Code Playgroud)

但他们没有提到你也可以这样做:

-device usb-host,hostbus=bus,hostport=port
Run Code Online (Sandbox Code Playgroud)

例如...

运行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
Run Code Online (Sandbox Code Playgroud)

我可以决定通过这些:

-device usb-host,hostbus=3,hostport=10 \
-device usb-host,hostbus=3,hostport=11 \
Run Code Online (Sandbox Code Playgroud)

这些对应于物理插槽。

但是,根据插入的是 USB 2.0 设备还是 USB 3.0 设备,USB 3.0 插槽的总线和端口会有所不同,但每个设备的端口将保持一致。

USB 2.0 插槽不存在这种差异。

对于 USB 集线器,使用圆点分隔端口。所以如果你有...

/:  Bus 03
|__ Port 2: some stuff
    |__ Port 1: some stuff
Run Code Online (Sandbox Code Playgroud)

你会用 -device usb-host,hostbus=3,hostport=2.1

  • 我试过这个并得到一个错误:“没有为设备'usb-host'找到'usb-bus'总线”在Debian Buster上使用qemu 3.1.0。我发现您还需要在命令行上使用 `-usb`。 (3认同)