Raspberry Pi

USB-Geräte in Linux im Netzwerk verfügbar machen

In einem Netzwerk können Sie Geräte gemeinsam verwenden. Das geht nicht nur indirekt wie bei der Dateifreigabe. Die Hardware lässt sich auch direkt ansprechen.

Für viele Geräte gibt es eigene Server- Dienste, die eine gleichzeitige und gemeinsame Nutzung über das Netzwerk erlauben. Bei Druckern beispielsweise richten Sie dafür eine Druckerfreigabe ein und bei USB-Festplatten eine Dateifreigabe. Es ist aber auch möglich, USB-Geräte über das Netzwerk so anzusprechen, als ob Sie direkt mit dem PC verbunden wären. Das ist beispielsweise bei Scannern und Multifunktionsgeräten recht sinnvoll. Für diese Aufgabe können Sie auch Ihren Raspberry Pi einsetzen.

1. So funktioniert ein USB-Server

Ein USB-Server verwendet einen Treiber für die Kommunikation mit dem USB-Host-Controller beziehungsweise den daran angeschlossenen Geräten. Der Treiber stellt gleichzeitig eine Schnittstelle im Netzwerk bereit, über die Kommandos an ein USB-Gerät weitergeleitet werden. Auf einem Client-PC im Netzwerk verarbeitet ein Treiber Anfragen an ein virtuelles USB-Gerät und sendet diese an den Server. Der decodiert die Informationen und leitete Sie an das physisch vorhandene USB-Gerät weiter. Für den Client sieht es so aus, als ob das USB-Gerät direkt mit ihm verbunden wäre, also im USB-Port am PC steckt. Beachten Sie aber, das bei dieser Methode immer nur jeweils ein PC das Gerät nutzen kann. Soll es an einem anderen Gerät zum Einsatz kommen, muss die vorherige Verbindung zuerst getrennt werden.

Die in diesem Artikel vorgestellte Software des USB/IP-Projekts gibt es zwar schon seit einigen Jahren, aber die Entwicklung ist immer noch nicht abgeschlossen. Inzwischen sind die Treiber in den Linux-Staging-Tree eingeflossen. Dadurch gibt es eine zentrale Stelle für die Weiterentwicklung, aber der Code wird bisher nicht als ausreichend stabil angesehen. Bei einigen Linux-Distributionen, etwa Ubuntu, sind die nötigen Kernel-Module bereits standardmäßig dabei, bei Raspian jedoch nicht. Deshalb müssen Sie diese selbst erstellen.

Den USB-Server des USB/IP-Projekts gibt es nur für Linux, Client-Software und Treiber sind für Linux (Punkt 2) und Windows erhältlich.


2. Kernel-Module für Raspbian erstellen

Wir gehen davon aus, dass Sie auf Ihrem Raspberry Pi bereits Raspbian installiert haben. Die folgenden Beschreibungen funktionieren ohne größere Änderungen nur zusammen mit Raspbian und der 64-Bit-Version von Ubuntu 14.04. Obwohl wir nur drei zusätzliche Kernel-Module (Treiber) benötigen, ist es kaum empfehlenswert, diese auf dem Raspberry Pi zu erstellen. Das dauert unverhältnismäßig lange. Deutlich schneller geht es mit einem anderen Linux-System, das Sie entweder auf dem PC oder in einer virtuellen Maschine einrichten, etwa mit Virtualbox. Sie können dafür die Ubuntu-Variante Mythbuntu verwenden.

Öffnen Sie ein Terminal-Fenster. In Mythbuntu gehen Sie dazu im Menü auf „Applications > System > Xfce Terminal“. Führen Sie die folgenden zwei Befehlszeilen aus:

cd ~ && wget www.pcwelt.de/oyhy -O
raspi_crosstools.sh
chmod 755 raspi_crosstools.sh

Achten Sie bei der wget-Zeile darauf, ein großes „-O“ zu verwenden. Starten Sie das Script dann mit der Zeile

sudo ./raspi_crosstools.sh

Geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden.

Das Script installiert zuerst die Versionsverwaltung Git, über die es den Raspian-Kernel und einige Tools herunterlädt. Die Tool-Sammlung enthält alles, was Sie benötigen, um auf einem PC mit Intel/AMD-Prozessor (x86/x64) einen Kernel beziehungsweise Kernel-Module für den Raspberry Pi (ARM-Prozessor) zu kompilieren. Nach erfolgreichem Download erstellt das Script die Kernel-Module „usbip-core.ko“, „usbip-host.ko“ und „vhci-hcd.ko“ im Verzeichnis „~/raspi_cross/kernel_mod/lib/modules/ 3.12.28+/extra“. Sollte der Kernel inzwischen neue Optionen bieten, ermöglicht das Konfigurations-Script die Modulauswahl.

Module kompilieren: Bei Raspbian fehlen die nötigen Kernel-Module für die Usbip-Software. Sie erstellen diese am schnellsten unter Ubuntu auf einem PC oder in einer virtuellen Maschine.
Module kompilieren: Bei Raspbian fehlen die nötigen Kernel-Module für die Usbip-Software. Sie erstellen diese am schnellsten unter Ubuntu auf einem PC oder in einer virtuellen Maschine.

Bestätigen Sie hier einfach die Vorgaben so oft wie nötig mit der Enter-Taste. Sobald das Script seine Arbeit abgeschlossen hat, kopieren Sie die erzeugten ko-Dateien auf Ihren Raspberry Pi in das Verzeichnis „/lib/modules/3.12.28+/extra“. Führen Sie auf diesem in einem Terminalfenster den Befehlsudo depmod aus, damit die neuen Kernel-Module eingebunden werden.

Das Script „raspi_crosstools.sh“ erstellt auch das Tool usbip im Verzeichnis „/usr/local/sbin“. Dabei handelt es sich um die Client-Anwendung für Ubuntu, mit der Sie USB-Geräte einbinden können. In das Verzeichnis „~/raspi_cross/Windows“ lädt das Script Treiber und Client-Anwendung für Windows 7 und 8 herunter. Kopieren Sie die Dateien „usbip_windows_ v0.2.0.0_signed.zip“ und „usbipv0.2.0. zip“ auf Ihren Windows-PC.