¿Puedo pasar a través de un puerto USB a través de la línea de comando qemu?

10

Estoy lanzando una VM usando qemu-system-x86_64. Conozco dos formas de pasar por un dispositivo USB.

Digamos, por ejemplo, que tenía un mouse que apareció en lsusb como

Bus 003 Device 011: ID 6ade:9582 Amazing Mouse Maker

Podría pasarlo usando

-device usb-host,vendorid=0x6ade,productid=0x9582

o

-device usb-host,hostbus=3,hostaddr=11

Ninguno de estos me gusta mucho. Si lo tomo por ID de proveedor / producto, nunca podré recuperar ese mouse hasta que la VM esté apagada.

Si lo tomo por BUS y número de dispositivo, tendré que decirle a Qemu que lo vuelva a adquirir si lo desconecto.

¿Es posible que lo envíe por Puerto (la ranura física real)? Digamos que está conectado al puerto 2 del bus 3. ¿Puedo pasarlo por eso?

DeepDeadpool
fuente

Respuestas:

13

Por alguna razón, esto no está documentado en el Qemu 2.12.50 User Doc y tuve que aprender lo que aprendí de este chico

Mencionan

-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 

Pero no mencionan que puedes hacer

-device usb-host,hostbus=bus,hostport=port

Por ejemplo...

Si ejecuto lsusb -t y obtengo

/:  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

Podría decidir pasar esto por

-device usb-host,hostbus=3,hostport=10 \
-device usb-host,hostbus=3,hostport=11 \

Y esos corresponden a las ranuras físicas.

Sin embargo, el bus y el puerto diferirán para una ranura USB 3.0 dependiendo de si un dispositivo USB 2.0 o un dispositivo USB 3.0 está enchufado, pero el puerto para cada dispositivo seguirá siendo consistente.

Dicha variación no existe para las ranuras USB 2.0.

/ * actualización: Hubs USB * /

Use puntos para separar los puertos. Entonces si tuvieras ...

/:  Bus 03
|__ Port 2: some stuff
    |__ Port 1: some stuff

Usarías -device usb-host,hostbus=3,hostport=2.1

DeepDeadpool
fuente
Intenté esto y obtuve un error: "No se encontró el bus 'usb-bus' para el dispositivo 'usb-host'" usando qemu 3.1.0 en Debian Buster. Descubrí que también necesitas -usben la línea de comando.
Brian Minton
Parece que actualizaron el número principal, por lo que pueden haber roto la interfaz
DeepDeadpool