Puis-je passer par un port USB via la ligne de commande qemu?

10

Je lance une machine virtuelle en utilisant qemu-system-x86_64. Je connais deux façons de passer par un périphérique USB.

Disons par exemple, j'avais une souris qui est apparue dans lsusb comme

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

Je pourrais le passer en utilisant

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

ou

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

Aucun de ceux-là que j'aime vraiment. Si je la récupère par ID de fournisseur / produit, je ne pourrai jamais récupérer cette souris jusqu'à ce que la machine virtuelle soit éteinte.

Si je le saisis par BUS et numéro de périphérique, je devrai dire à Qemu de le réacquérir si je le débranche.

Est-il possible pour moi de l'envoyer par port (l'emplacement physique réel)? Disons qu'il est branché sur le port 2 du bus 3. Puis-je le contourner?

DeepDeadpool
la source

Réponses:

13

Pour une raison quelconque, cela n'est pas documenté dans le document utilisateur Qemu 2.12.50 et j'ai dû apprendre ce que j'ai appris de ce type

Ils mentionnent

-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 

Mais ils ne mentionnent pas que vous pouvez faire

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

Par exemple...

Si je lance lsusb -t et obtient

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

Je pourrais décider de les passer

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

Et ceux-ci correspondent aux emplacements physiques.

Cependant, le bus et le port différeront pour un emplacement USB 3.0 selon qu'un périphérique USB 2.0 ou USB 3.0 y est branché, mais le port de chaque périphérique restera cohérent.

Un tel écart n'existe pas pour les emplacements USB 2.0.

/ * mise à jour: Hubs USB * /

Utilisez des points pour séparer les ports. Donc si tu avais ...

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

Vous utiliseriez -device usb-host,hostbus=3,hostport=2.1

DeepDeadpool
la source
J'ai essayé ceci et j'ai obtenu une erreur: "Aucun bus 'bus usb' trouvé pour le périphérique 'hôte-USB'" en utilisant qemu 3.1.0 sur Debian Buster. J'ai découvert que vous avez également besoin -usbde la ligne de commande.
Brian Minton
On dirait qu'ils ont mis à jour le numéro principal, donc ils ont peut-être cassé l'interface
DeepDeadpool