USB dans Xen OS: options possibles
Malgré ses nombreux avantages, la solution Xen présente toujours un inconvénient majeur. Comme tout hyperviseur bare metal, Xen a des problèmes pour rediriger les ports USB vers un OS hôte. Dans le même temps, il existe plusieurs façons d'accéder à un périphérique USB à partir d'un domaine invité Xen.
La méthode ci-dessus décrit comment procéder à l'aide d'un logiciel de relais USB Xenserver, mais parlons également de certaines méthodes "natives" pour accéder à l'USB depuis Xen.
Le plus souvent, les périphériques USB sont spécifiés soit par leur adresse de bus (bus.device) soit par leur balise de périphérique (vendorid: deviceid).
Vous pouvez répertorier les périphériques USB sur le système à l'aide de la commande 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
Par exemple, si vous devez rediriger la souris Logitech, vous pouvez spécifier 046d: c016 ou 1.6.
En règle générale, les périphériques hôtes individuels sont transmis à un système d'exploitation invité via un contrôleur de périphérique USB émulé ou PVUSB.
1. La première méthode implique que le modèle d'appareil (qemu) présente un contrôleur USB émulé à l'invité. Après cela, le processus de modèle de périphérique prend le contrôle du périphérique à partir du domaine 0 et transmet les commandes USB entre le système d'exploitation invité et le périphérique USB hôte.
Cette méthode peut être utilisée uniquement avec les domaines HVM et n'est pas disponible pour les domaines qui s'exécutent avec des domaines de stub de modèle de périphérique.
Quant à Xen 4.6, xl ne prend en charge que l'USB émulé, à partir du fichier de configuration.
Vous pouvez activer le concentrateur USB émulé à l'aide deusb=1. Ensuite, vous devrez spécifier des périphériques dans la liste des périphériques dans le fichier de configuration avec d'autres périphériques émulés à l'aide de host:USBID. Par exemple:
usb=1
usbdevice=['tablet','host:1.6','host:0424:460']
USB 1.1 est le contrôleur USB par défaut créé par qemu. Pour certains appareils, cependant, ce n'est pas suffisant. Dans un tel cas, à partir de 4.6, vous pouvez également utiliser usbversion pour spécifier la version du contrôleur USB. Cependant, actuellement ce n'est pas compatible avec usbdevice , et n'est donc efficace qu'en conjonction avec la redirection USB d'épices. Cette option n'est pas disponible pour qemu-traditional.
2. La deuxième méthode, PVUSB, utilise une interface front-end/back-end paravirtualisée, similaire au réseau PV traditionnel Xen et aux protocoles de disque.
Pour pouvoir utiliser PVUSB, vous devez utiliser usbfront dans votre système d'exploitation invité et usbback dans dom0 ou usb backend dans qemu (ou votre domaine de pilote USB).
La prise en charge de PVUSB dans xl / libxl (pour les périphériques PVUSB du fichier de configuration et les connexions et déconnexions à chaud de périphériques PVUSB) est disponible depuis Xen 4.7. Maintenant, cela fonctionne avec USB 1.1 et USB 2.0.
Voici ce que vous devez faire pour passer par des périphériques USB hôtes à l'invité avec PVUSB:
- Tout d'abord, à partir du fichier de configuration, spécifiez les contrôleurs USB et les périphériques hôtes USB à l'aide usbctrl et usbdev. Par exemple:
usbctrl=['type=qusb,version=2,ports=4', 'type=qusb,version=1, ports=4', ]
usbdev=['hostbus=2, hostaddr=1, controller=0,port=1', ]
- Ensuite, pour le type, vous pouvez spécifier auto (par défaut: xl essaie de sélectionner le type le plus approprié), qusb (backend basé sur qemu paravirtualisé, doit être spécifié pour pvUSB utilisé par les domaines HVM), pv (backend basé sur noyau paravirtualisé, non pris en charge par linux standard actuel), ou devicemodel (contrôleur USB émulé qemu, pas encore pris en charge).
Vous pouvez également spécifier usbdev uniquement, par exemple:
usbdev=['hostbus=2, hostaddr=1, ]
- Après cela, il créera automatiquement un contrôleur USB (version 2.0) et 8 ports, et connectera le périphérique USB au premier port de ce nouveau contrôleur.
- Pour brancher et débrancher à chaud un périphérique USB, vous pouvez utiliser des commandes usbctrl-attach, usbctrl-detach, usb-list, usbdev-attach and usbdev-detach.
Par exemple:
#xl usbctrl-attach test_vm version=1 ports=8
Accès aux périphériques USB via le réseau
Un autre moyen populaire d'accéder à un périphérique USB à partir d'un domaine invité Xen est une solution tierce dédiée fonctionnant sur le réseau. Dans ce cas, vous aurez besoin d'un serveur USB (matériel ou logiciel) et d'un client USB (logiciel). Ce dernier est en fait un pilote spécial pour le système d'exploitation. Maintenant, regardons de plus près cette façon simple et efficace d'obtenir la prise en charge du relais USB Xen dans votre machine virtuelle.