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.

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 Befehl sudo 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.
3. USB-Server auf dem Pi einrichten
Auf dem Raspberry Pi müssen Sie jetzt die Tools für die Verwaltung der USB-Geräte installieren. Führen Sie dazu in einem Terminalfenster folgende zwei Zeilen aus:
sudo apt-get update sudo apt-get install usbip
Jetzt ist Zeit für einen ersten Testlauf. Schließen Sie das USB-Gerät, das Sie im Netzwerk verwenden wollen, an den Raspberry Pi an. Führen Sie die folgenden zwei Befehlszeilen aus:
sudo modprobe usbip-host sudo usbipd -d
Damit laden Sie das nötige Kernel-Modul mit und starten den Usbip-Daemon im Debug-Modus. Wenn Sie die Software ausführlich getestet haben, tragen Sie beide Zeilen für den automatischen Start in die Datei „/etc/rc.local“ oberhalb von „exit 0“ ein, ersetzen aber „-d“ durch „-D“. Öffnen Sie ein zweites Terminalfernster. Der Befehl
sudo usbip list -l
gibt Ihnen hier die Liste der verfügbaren USBGeräte aus. Sie sehen deren USB-IDs beispielsweise in der Form „busid 1-1.3 (0424:ec00)“. Der Befehl lsusb zeigt die Gerätebezeichnung zur ID in der Regel im Klartext. Die Freigabe kann jetzt mit der dieser Zeile erfolgen:
sudo usbip bind -b 1-1.3
Der Erfolg wird mit der Ausgabe „bind device on busid 1-1.3: complete“ bestätigt.
Die WLAN-Tricks der Profi-Hacker

4. Zugriff auf USB-Geräte über das Netz
Installieren Sie unter Windows 7 oder 8 den Treiber aus dem Archiv „usbip_windows_ v0.2.0.0_signed.zip“ (Punkt 2). Eine Anleitung dazu finden Sie in der enthaltenen Datei „Install.txt“. Im Archiv „usbipv0.2.0. zip“ sind nur die Dateien „Usb.ids“ und „Usbip.exe“ enthalten. Öffnen Sie unter Windows eine Eingabeaufforderung in dem Verzeichnis, in das Sie „usbip-v0.2.0.zip“ entpackt haben. Mit
usbip.exe -l 192.168.0.37
erfahren Sie, welche Geräte ein USB-Server freigegeben hat. Die Adresse im Beispiel ersetzen Sie durch die IP-Adresse Ihres Raspberry Pi. Der Befehl
usbip.exe -a 192.168.0.37 1-1.3
stellt dann die Verbindung zu Bus-ID 1-1.3 her. Die Windows-Version des Programms läuft bisher nur im Vordergrund. Sie trennen die Verbindung einfach, in dem Sie das Fenster der Eingabeaufforderung schließen. Auf einem Ubuntu-System verwenden Sie die in Punkt 2 kompilierten Tools ähnlich. Die Syntax der Parameter ist jedoch anders. Das Gleiche gilt für ein Raspbian- oder Debian- System. Wenn Sie nur usbip starten, erhalten Sie eine kurze Übersicht der möglichen Parameter für die Kommandozeile.