So passen Sie ein ttyUSBX-Gerät an ein serielles USB-Gerät an

21

Optionstreiber stimmt mit der USB-ID überein und lädt den Treiber für dieses Gerät. Beispielsweise

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

Außerdem werden ttyUSBX-Geräte zur Verwaltung der Hardware erstellt

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

Ich habe jedoch mehr als ein serielles USB-Gerät und möchte wissen, welches TtyUSB für welche USBID geeignet ist. Ex. / dev / ttyUSB1 -> 19d2: 0031

Kennen Sie einen Punkt, an dem ich diese Informationen erhalten kann?

Meeresquest
quelle
Wenn Sie Details wie Hersteller / Produkt kennen, dann ist diese Antwort großartig
earcam

Antworten:

12

Schauen Sie sich das sysfs-Dateisystem an. Ein Beispiel für meine USB-Serie:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

Wie Sie sehen können, ttyUSB0Karten 067b:2303auf meinem Computer. Weitere Orte, die eine Erkundung wert sind, sind /sys/class/tty/. Achten Sie auf Symlinks.

Lekensteyn
quelle
hast du irgendetwas unternommen, um das PRODUKT aufzulisten?
Igor Stoppa
@IgorStoppa, Versuchen Sie, catdie ueventDatei aus dem Ergebnis von find /sys -name ttyACM0zum Beispiel. Ersetzen Sie den Knotennamen Ihres seriellen Geräts.
Sherrellbc
9

Sie können versuchen, festzustellen, ob Ihre Geräte unter / dev / serial / by-id / registriert sind.

ls -l / dev / serial / by-id

Diese Namen sollten konsistent sein und auf das richtige ttyUSBx verweisen (Symlink)

Wachskopf
quelle
Können Sie einige Erläuterungen, Beispiele usw. hinzufügen? Die Online-Antwort wird in SE
Romeo Ninov
@ RomeoNinov Ok, ich habe einige Erläuterungen hinzugefügt, wie Sie angefordert haben. Dies ist nicht gerade schwieriger als das bloße Durchsuchen eines anderen Verzeichnisses. Daher kann ich nicht erkennen, wie sich durch eine ausführlichere Antwort etwas verbessern lässt. Das tut mir leid.
Waxhead
Ich habe zwei identische Adapter (zwei Arduinos) an einen Raspberry Pi angeschlossen. ls -l /dev/serial/by-idGibt nur einen Adapter zurück ../../ttyUSB1, ls -l /sys/bus/usb-serial/deviceszeigt mir aber beide. Ich denke also nicht, dass dies eine gute Antwort ist.
Daniel F
6

Ich hatte ein ähnliches Problem .

Schreiben Sie dies an /etc/udev/rules.d/50-usb.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

bis zum Ende. Starten Sie neu.

Jetzt können Sie /dev/ONDAmit zu Ihrem ONDA-Gerät gelangen.

Wenn Sie möchten, dass Benutzer ohne Rootberechtigung diese verwenden können, fügen Sie hinzu

, MODE="0666"

bis zum Ende jeder Zeile.

Nick ODell
quelle
Ich habe dies getan und die Dateien überprüft, auf die sie verweisen. Das Produkt, das ich habe, verfügt über mehrere Schnittstellen, wie z. B. Festplatte, USB-seriell. Ich habe zwar die Verknüpfung zu / dev / ttyACM0 erwartet, aber es war zu / dev / sda. Wie kann in einer Regeldatei definiert werden, für welchen Gerätetyp die Regel gelten soll? Ich schrieb die Regeln in /etc/udev/rules.d/99-ftdi.rules
nurp
OK gefunden: SUBSYSTEM == "tty" zu den Regelparametern hinzugefügt. Dieser Wert kann in der Ausgabe von udevadm info --name=/dev/ttyACM0
nurp
3

Ich würde udev verwenden und einige Regeln schreiben, die Symlinks für die Geräte erstellen.

Um genügend Informationen zur Unterscheidung der Geräte zu erhalten, versuchen Sie Folgendes für alle Geräte:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk
Mathias Weidner
quelle
1

Die folgenden Befehle zeigen eine Liste der mit 19d2: 0016 verknüpften ttyUSB-Gerätenamen an (dies ist die "Modemmodus" -ID eines ZTE MF831-LTE-Sticks. Ihre ID kann davon abweichen.):

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

Dies durchläuft eine Liste von Dateien mit dem Dateinamen ttyUSB *, einschließlich Symlinks, in / sys / bus / usb / devices. In den Ergebnissen suchen wir nach einer Datei mit dem Namen modalias und suchen nach einer Zeichenfolge, die die Hersteller-ID "v" "19d2" und die Produkt-ID "p" 0016 enthält. Wenn die Ausgabe übereinstimmt, geben wir eine Zeichenfolge mit dem Präfix "/ dev / "vor dem USB? Name. Afaik die erste oder in der Regel die letzte (höchste Nummer) ist der Modem-Port für ZTE-Geräte. Sie können die Ergebnisse in einer Datei in / tmp / ausgeben und die Zeilen entsprechend mit head -n1 oder tail -n1 versehen. Wenn Sie über Hubs verfügen, müssen Sie möglicherweise die maximale Tiefe erhöhen.

Dies ist nicht die eleganteste Art, aber sie funktioniert auf fast jeder Linux-Variante.

epek
quelle