GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich heraus, welcher serielle Port verwendet wird?

Die Frage:

Ich habe ein Gerät (z. B. ein GSM-Modem) über eine serielle Schnittstelle (auch bekannt als RS-232) angeschlossen und muss sehen, mit welcher Datei in /dev/ Dateisystem wurde dieses Gerät angebunden, um mit ihm kommunizieren zu können. Leider gibt es keine neu erstellte Datei in /dev/ Auch in dmesg ist nichts zu sehen Ausgang. Das scheint also eine schwierige Frage zu sein.

Hintergrund:

Ich hatte noch nie mit einem seriellen Gerät gearbeitet, also habe ich gestern, als ein Bedarf auftauchte, versucht, es zu googeln, konnte aber nichts Hilfreiches finden. Ich habe ein paar Stunden mit der Suche verbracht und möchte eine gefundene Antwort teilen, da sie für jemanden hilfreich sein könnte.

Akzeptierte Antwort:

Leider sind serielle Ports nicht PlugNPlay, daher weiß der Kernel nicht, welches Gerät angeschlossen war. Nach dem Lesen eines HowTo Tutorial Ich habe die funktionierende Idee.

Der /dev/ Verzeichnis von Unix-ähnlichen Betriebssystemen enthält Dateien mit dem Namen ttySn (wobei n eine Zahl ist) . Die meisten von ihnen entsprechen nicht den vorhandenen Geräten. Um herauszufinden, welche dies tun, geben Sie einen Befehl ein:

$ dmesg | grep ttyS
[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[    0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

Oben ist eine Beispielausgabe meines PCs. Sie können die Initialisierung einiger serieller Ports sehen:

ttyS0 , ttyS1 , ttyS4 , ttyS5 .

Einer von ihnen wird eine positive Spannung an einem angeschlossenen Gerät haben. Also durch Vergleichen des Inhalts der Datei /proc/tty/driver/serial Mit und ohne angeschlossenem Gerät können wir ttyS leicht finden im Zusammenhang mit unserem Gerät. Also, jetzt tun:

$ sudo cat /proc/tty/driver/serial> /tmp/1

(trennen) Sie ein Gerät

$ sudo cat /proc/tty/driver/serial> /tmp/2

Überprüfen Sie als Nächstes den Unterschied zwischen den beiden Dateien. Unten ist eine Ausgabe meines PCs:

$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR

Indem wir die drei Zahlen mit der dmesg-Ausgabe vergleichen, können wir feststellen, welcher der Port ist:

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Daher ist unser Gerät /dev/ttyS0 , Mission erfüllt!


Linux
  1. Linux – So finden Sie Prozesse über die serielle Schnittstelle?

  2. Wie verwende ich Chromecast?

  3. So verwenden Sie den Linux-Befehl find zum Suchen von Dateien

  4. Shell - Wie finde ich das Verzeichnis eines Befehls?

  5. Wie verwende ich Regex mit dem Find-Befehl?

So verwenden Sie die SSH-Portweiterleitung

So finden Sie die Portnummer eines Dienstes in Linux

So finden Sie heraus, welcher Dienst an einem bestimmten Port lauscht

Wie finde ich das Kernel-Modul für ein bestimmtes Gerät?

So verwenden Sie den which-Befehl in Linux

Woher weiß ich, welches /dev/ttyS* meine serielle Schnittstelle ist?