23 September 2013

USB pass through von Geräten in KVM

Aktuelle Virtualisierungs-Lösungen bieten die Möglichkeit, USB-Geräte an das Gast-System weiter zu reichen. KVM ist da keine Ausnahme, und ermöglicht so zum Beispiel die Weitergabe eines USB-GSM-Modems an einen KVM-Gast.

Nahezu jedes Unternehmen setzt heutzutage auf die Virtualisierung von Diensten. Häufig werden dabei nicht nur neue Systeme, sondern auch alte Dienste auf die virtualisierte Infrastruktur umgesattelt. Ein Kunde traf dabei auf das Problem, dass ein Dienst abhängig war von einem externen USB-GSM-Modem – dieses musste in der virtualisierten Umgebung an den Gast weiter gereicht werden. Der Kunde setzt für seine Virtualisierung auf KVM, und das bietet für diese Zwecke selbstverständnlich USB pass through.

Um USB pass through zu nutzen müssen auf dem KVM-Host die „vendor ID“ und die „product ID“ des USB-Geräts ausgelesen werden:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 0557:2221 ATEN International Co., Ltd Winbond Hermon
Bus 002 Device 003: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem

Der letzte Eintrag zeigt das von Huawei hergestellte GSM-Modem. Die interessanten Ziffern ergeben sich aus den vierstelligen Nummern vor und nach dem Doppelpunkt: die „vendor ID“ ist 12d1, die product ID ist 1003.

Derzeit ist dies auf dem Gast-System noch nicht sichtbar. Dafür muss die Weiterreichung spezifiziert werden. Auf der Kommandozeile lässt sich dies mit dem „virsh“-Befehl umsetzen: $ sudo virsh edit example-server.

Dieses Programm öffnet die XML-Spezifikation des KVM-Gasts in einem Editor. Dort kann nun im Bereich „devices“ das USB-Gerät hinzugefügt werden:

[...]
<devices>
  [...]
  <hostdev mode='subsystem' type='usb' managed='no'>
    <source>
      <vendor id='0x12d1'/>
      <product id='0x1003'/>
    </source>
  </hostdev>
</devices>

Dabei muss darauf geachtet werden, dass den Nummern ein 0x beigefügt wird. Nachdem die Datei gespeichert und der KVM-Gast neugestartet wird – der KVM-Host braucht zum Glück dafür nicht neugestartet werden – kann auf dem Gast geprüft werden, ob das Gerät zu finden ist:

$ lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd 
Bus 001 Device 003: ID 0409:55aa NEC Corp. Hub
Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem

Das Gerät taucht in der Übersicht des Gasts auf, und wird in diesem Fall auch direkt als Modem bereit gestellt:

USB Serial support registered for GSM modem (1-port)
option 1-2.1:1.0: GSM modem (1-port) converter detected
usb 1-2.1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-2.1:1.1: GSM modem (1-port) converter detected
usb 1-2.1: GSM modem (1-port) converter now attached to ttyUSB1
usbcore: registered new interface driver option
option: v0.7.2:USB Driver for GSM modems

Damit ist das USB-GSM-Modem erfolgreich vom KVM-Host an den KVM-Gast übertragen worden.

 

Dieser Artikel wurde ursprünglich geschrieben von Roland Wolters.

Kategorien: HowTos
Tags: KVM Virtualisierung

SH

über den Autor

Sascha Heuer


Beitrag teilen: