Warum ändert sich die Aufzählung der USB-Anschlüsse?

10

Ich verwende ein Huawei GMS / UMTS USB-Modem mit Gnokii und Gammu. Das Modem befand sich im unteren Port des Pi. Damit dmesg | grep ttywürde sich auf /dev/ttyUSB0und 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 ..

RolfBly
quelle
Versuchen Sie, die Namen in /sys/class/tty/als Richtlinie zu verwenden.
Lekensteyn
Die einzigen ttyUSBs in / sys / class / tty sind ttyUSB0 und ttyUSB1. Jetzt. Wer weiß, was morgen sein wird.
RolfBly
Die USB-Aufzählung ändert sich aufgrund des Designs. Sie schließen ein neues Gerät an und erhalten eine neue Nummer. oder vielleicht ein altes Gerät, während die vorherige Portnummer noch mit unvollendeten Übertragungen beschäftigt ist. Versuchen Sie, die Geräte nicht zu früh wieder anzuschließen, und stellen Sie sicher, dass die gesamte Software, die diese Geräte verwendet, ihr Geschäft erfolgreich abgeschlossen hat.
Lenik

Antworten:

16

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:

dmesg | grep ttyUSB  

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).

udevadm info --name=/dev/ttyUSB1 --attribute-walk

3. Erstellen Sie eine Datei /etc/udev/rules.d/99-usb-serial.rulesmit etwa dieser Zeile:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(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:

sudo udevadm trigger

5. Überprüfen Sie, was passiert ist:

ls -l /dev/your_device_name  

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:

ls -l /dev/ttyUSB1   

Dann nur zum Spaß:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)
RolfBly
quelle
8

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-idLinks sollte gleich bleiben, es sei denn, ich füge einen anderen PL2303-basierten Konverter hinzu.

scruss
quelle
..Und wenn jemand wirklich einen neuen PL2303-basierten Konverter hinzufügt. (2 von ihnen) Was kann dann donw sein?
Obmerk Kronen
Du steckst fest. Ich bevorzuge es, Marken zu kombinieren, um dies zu vermeiden.
Scruss
Dies war immens hilfreich für eine serielle Schnittstelle, die sich in Python geändert hat - danke!
GhostToast