USB nel sistema operativo Xen:
possibili opzioni
Nonostante i suoi numerosi vantaggi, la soluzione Xen presenta ancora un grosso inconveniente. Come qualsiasi hypervisor bare metal, Xen ha problemi a reindirizzare le porte USB a un sistema operativo host. Allo stesso tempo, ci sono alcuni modi per ottenere l'accesso a un dispositivo USB da un dominio ospite Xen. Il metodo sopra descrive come farlo con l'aiuto di un software passthrough USB Xenserver, ma parliamo di alcuni metodi "nativi" per accedere anche a USB da Xen.
Più comunemente, i dispositivi USB sono specificati dal loro indirizzo bus (bus.device) o dal loro tag dispositivo (vendorid: deviceid).
È possibile elencare i dispositivi USB sul sistema utilizzando il comando lsusb:
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 003 Device 002: ID f617:0905
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0424:2640 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 005: ID 0424:4060 Standard Microsystems Corp. Ultra Fast Media Reader
Bus 001 Device 006: ID 046d:c016 Logitech, Inc. Optical Wheel Mouse
Ad esempio, se è necessario reindirizzare il mouse Logitech, è possibile specificare 046d: c016 o 1.6.
In genere, i singoli dispositivi host vengono inoltrati a un SO guest tramite un controller di dispositivo USB emulato o PVUSB.
1. Il primo metodo implica che il modello del dispositivo (qemu) presenti un controller USB emulato al guest. Successivamente, il processo del modello del dispositivo prende il controllo del dispositivo dal dominio 0 e trasmette i comandi USB tra il sistema operativo guest e il dispositivo USB host.
Questo metodo può essere utilizzato solo con domini HVM e non è disponibile per domini eseguiti con domini stub modello di dispositivo.
Per quanto riguarda Xen 4.6, xl supporta solo la USB emulata, dal file di configurazione.
You can enable the emulated USB hub by using usb=1. Then, you'll need to specify devices in the list of devices in the config file together with other emulated devices by using host:USBID. For instance:
usb=1
usbdevice=['tablet','host:1.6','host:0424:460']
USB 1.1 è il controller USB predefinito creato da qemu. Per alcuni dispositivi, tuttavia, questo non è sufficiente. In tal caso, a partire dalla 4.6, è possibile utilizzare usbversion per specificare anche la versione del controller USB. Tuttavia, attualmente questo non è compatibile con usbdevice , quindi è efficace solo in combinazione con il reindirizzamento USB delle spezie. Questa opzione non è disponibile per qemu-tradizionale.
2. Il secondo metodo, PVUSB, utilizza un'interfaccia front-end / back-end paravirtualizzata, simile alla tradizionale rete Xen PV e ai protocolli del disco.
Per poter utilizzare PVUSB, è necessario usbfront nel sistema operativo guest e si utilizza il backup in dom0 o il backend USB in qemu (o il dominio del driver USB).
Il supporto per PVUSB in xl / libxl (per entrambi i dispositivi PVUSB da file di configurazione e hot plug e un-plug del dispositivo PVUSB) è disponibile da Xen 4.7. Ora funziona con USB 1.1 e USB 2.0.
Ecco cosa dovresti fare per passare i dispositivi USB host al guest con PVUSB:
- Innanzitutto, dal file di configurazione, specificare i controller USB e i dispositivi host USB utilizzando usbctrl e usbdev. Per esempio:
usbctrl=['type=qusb,version=2,ports=4', 'type=qusb,version=1, ports=4', ]
usbdev=['hostbus=2, hostaddr=1, controller=0,port=1', ]
- Quindi, per tipo è possibile specificare auto (impostazione predefinita: xl tenta di selezionare il tipo più adatto), qusb (backend basato su qemu paravirtualizzato, dovrebbe essere specificato per pvUSB utilizzato dai domini HVM), pv (backend basato su kernel paravirtualizzato, non supportato da Linux standard corrente) o devicemodel (controller USB emulato qemu, non ancora supportato).
Inoltre, puoi specificare solo usbdev, ad esempio:
usbdev=['hostbus=2, hostaddr=1, ]
- Successivamente, creerà automaticamente un controller USB (versione 2.0) e 8 porte e collegherà il dispositivo USB alla prima porta di questo nuovo controller.
- Per collegare a caldo e scollegare il dispositivo USB, è possibile utilizzare i comandi usbctrl-attach, usbctrl-detach, usb-list, usbdev-attach and usbdev-detach.
Per esempio:
#xl usbctrl-attach test_vm version=1 ports=8
Accesso ai dispositivi USB in rete
Un altro modo popolare per ottenere l'accesso a un dispositivo USB da un dominio guest Xen è una soluzione di terze parti dedicata che funziona in rete. In questo caso avrai bisogno di un server USB (hardware o software) e un client USB (software). Quest'ultimo è in realtà un driver speciale per il sistema operativo. Ora diamo un'occhiata più da vicino a questo modo semplice ed efficiente per ottenere il supporto passthrough Xen USB nella tua macchina virtuale.