Bisakah saya melewati Port USB melalui Baris Perintah qemu?

10

Saya meluncurkan VM menggunakan qemu-system-x86_64. Saya tahu dua cara untuk melewati perangkat USB.

Katakan misalnya, saya punya mouse yang muncul di lsusb like

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

Saya bisa melewati itu menggunakan

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

atau

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

Tak satu pun dari ini saya sangat suka. Jika saya mengambilnya dengan Vendor / ID Produk maka saya tidak akan pernah bisa mendapatkan kembali mouse itu sampai VM dimatikan.

Jika saya mengambilnya dengan nomor BUS dan Perangkat, maka saya harus memberi tahu Qemu untuk mendapatkannya kembali jika saya mencabutnya.

Apakah mungkin bagi saya untuk mengirimkannya melalui Port (slot fisik sebenarnya)? Katakanlah itu dicolokkan ke Bus 3 Port 2. Bisakah saya melewatinya?

DeepDeadpool
sumber

Jawaban:

13

Untuk beberapa alasan ini tidak didokumentasikan pada Qemu 2.12.50 Dokumen Pengguna dan saya harus mempelajari apa yang saya pelajari dari orang ini

Mereka menyebutkan

-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 

Tetapi mereka tidak menyebutkan bahwa Anda dapat melakukannya

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

Sebagai contoh...

Jika saya menjalankan lsusb -t dan dapatkan

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

Saya bisa memutuskan untuk melewatinya

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

Dan itu sesuai dengan slot fisik.

Namun bus dan port akan berbeda untuk slot USB 3.0 tergantung pada apakah perangkat USB 2.0 atau perangkat USB 3.0 dicolokkan ke dalamnya, tetapi port untuk setiap perangkat akan tetap konsisten.

Varians seperti itu tidak ada untuk slot USB 2.0.

/ * Pembaruan: Hub USB * /

Gunakan titik untuk memisahkan port. Jadi jika Anda punya ...

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

Anda akan menggunakannya -device usb-host,hostbus=3,hostport=2.1

DeepDeadpool
sumber
Saya mencoba ini dan mendapat kesalahan: "Tidak ditemukan bus 'usb-bus' untuk perangkat 'usb-host'" menggunakan qemu 3.1.0 di Debian Buster. Saya menemukan bahwa Anda perlu -usbdi baris perintah juga.
Brian Minton
Sepertinya mereka memperbarui nomor utama, sehingga mereka mungkin telah merusak antarmuka
DeepDeadpool