Posso passar por uma porta USB via qemu Command Line?

10

Estou iniciando uma VM usando qemu-system-x86_64. Conheço duas maneiras de passar por um dispositivo USB.

Digamos, por exemplo, eu tinha um mouse que apareceu no LSUSB como

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

Eu poderia passar usando

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

ou

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

Nenhuma dessas eu realmente gosto. Se eu pegá-lo pelo fornecedor / ID do produto, nunca poderei recuperar esse mouse até que a VM seja desligada.

Se eu o pegar pelo número de barramento e dispositivo, terei de dizer ao Qemu para recuperá-lo se eu o desconectar.

É possível enviar pelo Port (o slot físico real)? Digamos que esteja conectado à porta 2 do barramento 3. Posso passar por isso?

DeepDeadpool
fonte

Respostas:

13

Por alguma razão, isso não está documentado no Qemu 2.12.50 User Doc e tive que aprender o que aprendi com esse cara

Eles mencionam

-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 

Mas eles não mencionam que você pode fazer

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

Por exemplo...

Se eu executar o lsusb -t e obter

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

Eu poderia decidir passar por estes

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

E esses correspondem aos slots físicos.

No entanto, o barramento e a porta diferem para um slot USB 3.0, dependendo se um dispositivo USB 2.0 ou USB 3.0 estiver conectado a ele, mas a porta de cada dispositivo permanecerá consistente.

Essa variação não existe para os slots USB 2.0.

/ * atualização: Hubs USB * /

Use pontos para separar as portas. Então, se você tivesse ...

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

Você usaria -device usb-host,hostbus=3,hostport=2.1

DeepDeadpool
fonte
Eu tentei isso e obtive um erro: "Nenhum barramento 'usb-bus' encontrado para o dispositivo 'usb-host'" usando o qemu 3.1.0 no Debian Buster. Eu descobri que você precisa -usbna linha de comando também.
Brian Minton
Parece que eles atualizaram o número principal, portanto podem ter quebrado a interface
DeepDeadpool