Могу ли я пройти через порт USB через командную строку qemu?

10

Я запускаю виртуальную машину с помощью qemu-system-x86_64. Я знаю два способа пройти через USB-устройство.

Скажем, например, у меня была мышь, которая появилась в lsusb как

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

Я мог бы пройти через использование

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

или

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

Ни то, ни другое мне не нравится. Если я возьму его по идентификатору производителя / продукта, я никогда не смогу вернуть эту мышь, пока виртуальная машина не будет выключена.

Если я возьму его по номеру BUS и устройству, то мне придется сказать Qemu, чтобы он снова был у меня, если я отключу его.

Могу ли я отправить его через порт (фактический физический слот)? Скажем, он подключен к шине 3 порта 2. Могу ли я пройти мимо этого?

DeepDeadpool
источник

Ответы:

13

По какой-то причине это не задокументировано в Документе пользователя Qemu 2.12.50, и мне пришлось узнать, что я узнал от этого парня

Они упоминают

-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 

Но они не упоминают, что вы можете сделать

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

Например...

Если я запускаю lsusb -t и получаю

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

Я мог бы решить пройти мимо

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

И те соответствуют физическим слотам.

Однако шина и порт будут различаться для слота USB 3.0 в зависимости от того, подключено ли к нему устройство USB 2.0 или USB 3.0, но порт для каждого устройства останется согласованным.

Такой разницы не существует для слотов USB 2.0.

/ * обновление: USB-концентраторы * /

Используйте точки для разделения портов. Так что, если бы вы имели ...

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

Вы бы использовали -device usb-host,hostbus=3,hostport=2.1

DeepDeadpool
источник
Я попробовал это и получил ошибку: «Не найдена шина usb-bus для устройства usb-host» с использованием qemu 3.1.0 на Debian Buster. Я узнал, что вам нужно и -usbв командной строке.
Брайан Минтон
Похоже, они обновили основной номер, поэтому они могли сломать интерфейс
DeepDeadpool