Leider sind serielle Ports nicht PlugNPlay-fähig, sodass der Kernel nicht weiß, welches Gerät angeschlossen ist. Nach dem Lesen eines HowTo- Tutorials habe ich eine Idee.
Das /dev/
Verzeichnis von Unix-ähnlichen Betriebssystemen enthält Dateien mit dem Namen ttySn (wobei n eine Zahl ist) . Die meisten entsprechen nicht den vorhandenen Geräten. Geben Sie einen Befehl ein, um herauszufinden, welche dieser Befehle ausgeführt werden:
$ 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. Wenn/proc/tty/driver/serial
wir also den Inhalt der Datei mit und ohne angeschlossenes Gerät vergleichen, können wir die mit unserem Gerät verbundenen ttyS leicht finden . Also machen Sie jetzt:
$ sudo cat /proc/tty/driver/serial> /tmp/1
Ein Gerät (aus) stecken
$ sudo cat /proc/tty/driver/serial> /tmp/2
Überprüfen Sie anschließend den Unterschied zwischen den beiden Dateien. Unten ist eine Ausgabe von meinem PC:
$ 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
Durch Vergleichen der drei Zahlen mit der dmesg-Ausgabe können wir feststellen, welcher der Ports 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!