Kann ich über die qemu-Befehlszeile einen USB-Anschluss passieren?

10

Ich starte eine VM mit qemu-system-x86_64. Ich kenne zwei Möglichkeiten, um ein USB-Gerät zu passieren.

Sagen wir zum Beispiel, ich hatte eine Maus, die wie in lsusb auftauchte

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

Ich könnte es durch verwenden

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

oder

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

Beides mag ich nicht wirklich. Wenn ich es anhand der Hersteller- / Produkt-ID abrufe, kann ich diese Maus erst wieder zurückfordern, wenn die VM ausgeschaltet ist.

Wenn ich es nach BUS und Gerätenummer abrufe, muss ich Qemu anweisen, es erneut zu beziehen, wenn ich den Stecker aus der Steckdose ziehe.

Kann ich es per Port (dem tatsächlichen physischen Steckplatz) senden? Angenommen, es ist an Bus 3 Port 2 angeschlossen. Kann ich es damit weiterleiten?

DeepDeadpool
quelle

Antworten:

11

Aus irgendeinem Grund ist dies nicht im Qemu 2.12.50-Benutzerdokument dokumentiert, und ich musste lernen, was ich von diesem Typen gelernt habe

Sie erwähnen

-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 

Aber sie erwähnen nicht, dass Sie tun können

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

Zum Beispiel...

Wenn ich lsusb -t laufen lasse und bekomme

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

Ich könnte beschließen, diese zu überholen

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

Und diese entsprechen den physischen Slots.

Der Bus und der Anschluss für einen USB 3.0-Steckplatz unterscheiden sich jedoch je nachdem, ob ein USB 2.0-Gerät oder ein USB 3.0-Gerät angeschlossen ist. Der Anschluss für jedes Gerät bleibt jedoch konsistent.

Eine solche Abweichung besteht für USB 2.0-Steckplätze nicht.

/ * Update: USB Hubs * /

Verwenden Sie Punkte, um die Ports zu trennen. Also wenn du hättest ...

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

Sie würden verwenden -device usb-host,hostbus=3,hostport=2.1

DeepDeadpool
quelle