web-dev-qa-db-fra.com

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

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

Disons par exemple, j'ai eu 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 tant que le VM n'est pas désactivé.

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?

10
DeepDeadpool

Pour une raison quelconque, cela n'est pas documenté sur le Doc utilisateur Qemu 2.12.5 et j'ai dû apprendre ce que j'ai appris de ce gars

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

11
DeepDeadpool