usbreset.c: Dieses kleine Skript setzt die USB-Ports zurück! Wenn ein USB-Gerät am Linux-Rechner, in unserem Beispiel ein Arduino an einem Raspberry Pi, nicht mehr erkannt wird, muss das nicht unbedingt am Rechner liegen: Zahlreiche Logitech-Webcams machen Probleme und billige Versionen des Arduino müssen nach einem Neustart des Raspberry oft einmal vom Computer getrennt und neu einsteckt werden. Ist der Raspberry aber in einem Gehäuse oder schwer zu erreichen verbaut, ist das nicht immer einfach möglich: Da hilft der USB Reset mit dem usbreset.c Programm – Per Software lassen sich die USB Ports einmal komplett abschalten – das funktioniert dann so, als würde man das Kabel abtrennen und hat bei uns auch bei Problemen mit dem Arduino geholfen!
USB Reset: So startet man die Raspberry USB Ports neu!
Das folgende C Programm stammt von Alan Stern und setzt die USB Ports eines Linux-Rechners nach dem Start zurück. Es lässt sich direkt von der Seite kopieren und in einen Text-Editor einfügen: Wer bereits am Linux-Rechner angemeldet ist, kann direkt den vi oder nano Editor starten und den Code einfügen:
sudo nano usbreset.c
Nach Einfügen, speichern (STRG + O) und schließen des Editors (STRG + X) hat man den Source-Code in seinem Benutzerordnet gespeichert. Um daraus ein ausführbares Programm zu erstellen, muss man den Code kompilieren. Dazu sollte man sich am Besten direkt als root-User anmelden, damit später nicht jeder User auf die Datei zugreifen oder sie verändern kann.
gcc usbreset.c -o usbreset
Anschließend kann man die kompilierte Programm-Datei in den Programm-Ordner verschieben, damit sie direkt ohne Pfadangabe aufrufbar ist:
mv usbreset /usr/local/sbin/
Zum Starten des Programms muss man den USB Port angeben, den man zurücksetzen möchte – wenn man sich nicht sicher ist, kann man nacheinander auch alle Ports 001, 002, 003, 004 und 005 zurücksetzen. Wenn das Gerät aber mit einem Namen und Hersteller erkannt wurde, lässt sich der richtige Port auch mit dem Befehl “lsusb” auslesen:
Jetzt lässt sich der entsprechende Port mit dem USB-Reset-Programm zurücksetzen und so simulieren, dass das USB Gerät neu eingesteckt wurde:
usbreset /dev/bus/usb/001/002
Ob es funktioniert, haben wir im Test mit dem Smart-Home Programm FHEM probiert: Nach dem Neustart des Raspberry wurde ein eingesteckter Arduino immer als “disconnected” angezeigt, bis er einmal aus- und wieder eingesteckt wurde:
Nach dem Software-Reset des USB-Ports wurde er aber direkt erkannt und war einsatzbereit – wenn man den richtigen USB Port zurückgesetzt hat :)