USB no Xen OS: opções possíveis
Apesar de suas muitas vantagens, a solução Xen ainda tem uma grande desvantagem. Como qualquer hipervisor bare metal, o Xen tem problemas para redirecionar as portas USB para um sistema operacional host. Ao mesmo tempo, existem algumas maneiras de obter acesso a um dispositivo USB de um domínio convidado do Xen. O método acima descreve como fazer isso com a ajuda de um software de passagem USB Xenserver, mas vamos falar sobre alguns métodos "nativos" para acessar o USB do Xen também.
Geralmente, os dispositivos USB são especificados pelo endereço do barramento (bus.device) ou pela etiqueta do dispositivo (vendorid: deviceid).
Você pode listar os dispositivos USB no sistema usando o 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
Por exemplo, se você precisar redirecionar o mouse Logitech, poderá especificar 046d: c016 ou 1.6.
Normalmente, os dispositivos host individuais são encaminhados para um SO convidado por meio de um controlador de dispositivo USB emulado ou PVUSB.
1. O primeiro método implica que o modelo do dispositivo (qemu) apresenta um controlador USB emulado ao convidado. Depois disso, o processo de modelo do dispositivo assume o controle do dispositivo a partir do domínio 0 e transmite os comandos USB entre o sistema operacional convidado e o dispositivo USB host.
Esse método pode ser usado apenas com domínios HVM e não está disponível para domínios executados com domínios stub de modelo de dispositivo.
Quanto ao Xen 4.6, o xl suporta apenas o USB emulado, a partir do arquivo de configuração.
Você pode ativar o hub USB emulado usando usb=1 . Em seguida, você precisará especificar dispositivos na lista de dispositivos no arquivo de configuração junto com outros dispositivos emulados usandohost:USBID. Por exemplo:
usb=1
usbdevice=['tablet','host:1.6','host:0424:460']
USB 1.1 é o controlador USB padrão criado pelo qemu. Para alguns dispositivos, no entanto, isso não é suficiente. Nesse caso, começando com 4.6, você pode usar usbversion para especificar também a versão do controlador USB. No entanto, atualmente isso não é compatível com o usbdevice e, portanto, só é eficiente em conjunto com o redirecionamento USB de especiarias. Esta opção não está disponível para qemu tradicional.
2. O segundo método, o PVUSB, usa uma interface front-end / back-end paravirtualizada, semelhante à rede tradicional Xen PV e aos protocolos de disco.
Para poder usar o PVUSB, é necessário o usbfront no sistema operacional convidado e o usbback no dom0 ou o backend usb no qemu (ou no domínio do driver USB).
O suporte ao PVUSB no xl / libxl (para o dispositivo PVUSB do arquivo de configuração e para o dispositivo PVUSB hot-plug e un-plug) está disponível desde o Xen 4.7. Agora, ele funciona com USB 1.1 e USB 2.0.
Aqui está o que você deve fazer para passar pelos dispositivos USB host para o convidado com PVUSB:
- Primeiro, no arquivo de configuração, especifique controladores USB e dispositivos host USB usando usbctrl e usbdev. Por exemplo:
usbctrl=['type=qusb,version=2,ports=4', 'type=qusb,version=1, ports=4', ]
usbdev=['hostbus=2, hostaddr=1, controller=0,port=1', ]
- Em seguida, para o tipo, você pode especificar auto (o padrão: xl tenta selecionar o tipo mais adequado), qusb (back-end baseado em qemu paravirtualizado, deve ser especificado para pvUSB usado por domínios HVM), pv (back-end baseado em kernel paravirtualizado, não suportado por linux padrão atual) ou devicemodel (controlador USB emulado qemu, ainda não suportado).
Além disso, você pode especificar apenas usbdev, por exemplo:
usbdev=['hostbus=2, hostaddr=1, ]
- Depois disso, ele cria um controlador USB (versão 2.0) e 8 portas automaticamente e conecta o dispositivo USB à primeira porta desse novo controlador.
- Para conectar e desconectar o dispositivo PVUSB, você pode usar os comandos usbctrl-attach, usbctrl-destacável, lista usb, usbdev-attach e usbdev-destacado .
Por exemplo:
#xl usbctrl-attach test_vm version=1 ports=8
Acessando dispositivos USB pela rede
Outra maneira popular de obter acesso a um dispositivo USB a partir de um domínio convidado Xen é uma solução dedicada de terceiros que trabalha pela rede. Nesse caso, você precisará de um servidor USB (hardware ou software) e um cliente USB (software). Este último é realmente um driver especial para o sistema operacional. Agora, vamos analisar mais de perto essa maneira simples e eficiente de obter suporte de passagem USB Xen em sua máquina virtual.