Passa um hub USB de um host KVM para um convidado com libvirt

3

Eu tenho os seguintes dispositivos USB em um servidor Linux:

# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 2: Dev 3, If 0, Class=HID, Driver=usbfs, 1.5M
        |__ Port 3: Dev 4, If 0, Class=hub, Driver=hub/4p, 480M
            |__ Port 1: Dev 8, If 0, Class=print, Driver=usbfs, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M

Gostaria de passar todo o hub USB (Dev 4) para um convidado do Windows XP. Nesse caso, um dispositivo conectado e removido para o hub deve ser tratado automaticamente pelo convidado (certo?).

Eu tentei o seguinte código com virsh attach-device :

<hostdev mode='subsystem' type='usb' managed='yes'>
 <source>
  <address type='usb' bus='0x002' port='1.3' />
 </source>
</hostdev>

mas não funcionou:

error: Failed to attach device from attach_hub.xml
error: internal error usb address needs device id

O que estou fazendo de errado?

    
por stenio 13.02.2015 / 16:40

3 respostas

2

xml para hub: link

Um exemplo:

  <hub type='usb'>
     <address type='usb' bus='0' port='1'/>
  </hub>

link

    
por 27.02.2015 / 10:03
1

Eu sei que esse segmento tem alguns anos, mas venho fazendo alguns dias de trabalho sobre esse tópico exato e sinto que a pergunta poderia usar algumas de minhas respostas.

Primeiro , de acordo com a documentação do formato de domínio Libvirt , o seguinte snippet descreve a porcentagem correta sintaxe<hostdev>:

...
<devices>
  <hostdev mode='subsystem' type='usb'>
    <source startupPolicy='optional'>
      <vendor id='0x1234'/>
      <product id='0xbeef'/>
    </source>
    <boot order='2'/>
  </hostdev>
</devices>
...

O motivo do seu erro é devido às tags <vendor> e <product> ausentes para o seu USB <source>

Second , Se você estiver executando o Ubuntu 16.04 ou superior (como eu), você terá mensagens de passagem USB bem-sucedidas com o formato de dispositivo XML acima ao usar o virsh attach-device hot-plug, mas o dispositivo nunca será conectado à VM. Isso é culpa do AppArmor. Eu encontrei um comentário no outro tópico vinculando a esta configuração do AppArmor Libvirt para resolver problemas de passagem USB, o que posso confirmar que funcionou para resolver meus problemas.

O snippet relevante do AppArmor:

In order for a software program to access the usb device correctly the apparmor abstraction for qemu must be changed. Edit /etc/apparmor.d/abstractions/libvirt-qemu add a line:

# this lets qemu read all USB device information and might be considered a security risk
/run/udev/data/* r,

Terceiro , os "hubs USB" mencionados nas outras respostas não são hubs no escopo da máquina host, mas sim no escopo da VM. Do mesmo documento do Libvirt:

The hub element has an optional sub-element with type='usb' which can tie the device to a particular controller[...]

Many devices have an optional sub-element to describe where the device is placed on the virtual bus presented to the guest.

Espero que isso ajude alguém:)

    
por 30.10.2018 / 04:22
0

Se alguém ainda estiver procurando por isso, use o formulário:

<address type='usb' bus='0' device='1'/>

A entrada do dispositivo corresponde à saída de entrada "Dev" por lsusb -t

    
por 15.07.2017 / 18:46