Ich verwende ein Huawei GMS / UMTS USB-Modem mit Gnokii und Gammu. Das Modem befand sich im unteren Port des Pi. Damit dmesg | grep tty
würde sich auf /dev/ttyUSB0
und zeigen /dev/ttyUSB1
. (In diesem Fall sind 2 USB-Geräte an einem Stick normal).
Ich habe Gnokii und Gammu entsprechend konfiguriert, aber auf ttyUSB0 konnte ich nur Nachrichten senden. Sowohl das Senden als auch das Empfangen würden nur über ttyUSB1 funktionieren.
Ich habe dann den Stick in die obere USB-Buchse geschoben (weil mein WiFi-Stick sonst nicht daneben passen würde). Alles funktionierte gut. Auch nach mehreren Neustarts kalt und warm.
Ich musste dann das Dateisystem erweitern (Ja, ich weiß, ich hätte das früher tun sollen). Danach war das Modem auf ttyUSB0 und ttyUSB * 2 *. Senden / Empfangen arbeitete an letzterem. Ich brauchte einige Zeit, um es herauszufinden.
Update: 2 Tage später ist ttyUSB2 verschwunden. Das funktionierende Modem manifestiert sich jetzt auf ttyUSB0 (war ttyUSB1).
Irgendeine Idee, warum das passiert ist? Gibt es vielleicht Links zu relevanten Debian- oder Linux-Dokumenten? Ich wäre sehr verpflichtet ..
quelle
/sys/class/tty/
als Richtlinie zu verwenden.Antworten:
Die Gammu-Dokumentation schlägt eine Problemumgehung vor (geht jedoch nicht ins Detail).
Bearbeiten: Atmel hat eine Anwendungsnotiz , die den Aufzählungsprozess gut beschreibt.
Die Aufzählung ändert sich, weil sie in einem Gespräch zwischen Host, Hub und Gerät stattfindet und der Antwortzeitpunkt von jedem dieser Schritte unterschiedlich sein kann, selbst wenn das Setup von Neustart zu Neustart identisch ist.
Update: Die Lösung ist nicht leicht online zu finden und überall in Teilen verteilt. Also habe ich alles in einem Dokument zusammengefasst . Darauf kommt es an.
1. finde heraus, was auf ttyUSB läuft:
2. Listen Sie alle Attribute des Geräts auf und wählen Sie einen eindeutigen Bezeichnersatz aus, z. B. idVendor + idProduct (und ggf. SerialNumber, wenn Sie mehr als ein Gerät mit demselben idVendor und idProduct haben).
3. Erstellen Sie eine Datei
/etc/udev/rules.d/99-usb-serial.rules
mit etwa dieser Zeile:(Vorausgesetzt, Sie benötigen dort keine Seriennummer und natürlich die Nummern für idVendor und idProduct, die Sie in Schritt 2 gefunden haben.
4. Laden Sie die neue Regel:
5. Überprüfen Sie, was passiert ist:
zeigt an, zu welcher ttyUSB-Nummer der Symlink gegangen ist. Wenn ja
/dev/ttyUSB1
, überprüfen Sie, wem das gehört und zu welcher Gruppe es gehört:Dann nur zum Spaß:
quelle
Sie haben Ihre eigene Frage teilweise beantwortet, aber es gibt eine andere Möglichkeit, insbesondere für serielle Geräte: die
/dev/serial/*
Pfade. Ich habe eine Prolific USB → RS232-Schnittstelle auf meinem Raspberry Pi, die fast immer als angezeigt wird/dev/ttyUSB0
. Es erscheint aber auch auf dem System als:/dev/serial/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-port0
/dev/serial/by-id/usb-067b_2303-if00-port0
Die Verwendung des
by-id
Links sollte gleich bleiben, es sei denn, ich füge einen anderen PL2303-basierten Konverter hinzu.quelle