Warum habe ich /dev/ttyS* unter Linux, wenn mein Laptop keinen seriellen/RS232/COM1-Anschluss hat?

Warum habe ich /dev/ttyS* unter Linux, wenn mein Laptop keinen seriellen/RS232/COM1-Anschluss hat?

Ich verwende Debian Wheezy und mein Laptop hat keinen seriellen Anschluss. Warum habe ich einen /dev/ttyS*und was passiert, wenn ich versuche, darauf zu lesen/schreiben?

Meine Konfiguration:

└──> ll /dev/ttyS*
crw-rw---T 1 root dialout 4, 64 Apr 30 09:21 /dev/ttyS0
crw-rw---T 1 root dialout 4, 65 Apr 30 09:21 /dev/ttyS1
crw-rw---T 1 root dialout 4, 66 Apr 30 09:21 /dev/ttyS2
crw-rw---T 1 root dialout 4, 67 Apr 30 09:21 /dev/ttyS3

└──> sudo cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3

└──> stty -g
6d02:5:4bf:8a3b:3:1c:7f:15:4:0:1:ff:11:13:1a:ff:12:f:17:16:ff:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

└──> dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.653544] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.712718] 00:02: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

PS:HierDies ist der Fall, wenn der Benutzer einen Port hat und unter /dev 4 hat, ich aber keinen.

Antwort1

Es ist sehr wahrscheinlich, dass der ttyS0-Port tatsächlich auf Ihrem Motherboard vorhanden ist. Und sehr wahrscheinlich gibt es auch einen Anschluss auf dem Motherboard, um ihn ebenfalls zu verwenden! Als ich mein letztes Board kaufte, kam ich auch zu diesem Schluss (als ich den aufgelisteten Port sah) und suchte dann alle Anschlüsse im Handbuch des Boards nach. Es gab keinen direkten Anschluss nach außen, nur einen kleinen „Header“. Also verlegte ich ein Kabel zu einem externen DB9-Anschluss und alles funktioniert!

Die folgenden drei ( ttyS1-S3) existieren höchstwahrscheinlich NICHT, sind aber aufgeführt, weil der serielle Porttreiber sie getestet hat, was in vielen Linux-Versionen die Standardaktion ist. Siehe die Manualpage für setserial, die Funktion, die aufgerufen wird, wenn Linux hochgefahren wird. Dort steht:

Während des normalen Startvorgangs werden nur die COM-Ports 1-4 initialisiert, wobei die Standard-E/A-Ports und IRQ-Werte verwendet werden, wie unten aufgeführt

EDIT: Übrigens ist es einfach zu sehen, ob die ttyS*Dateien funktionieren oder nicht. Versuchen Sie einfach, ihnen per Konsolenbefehl etwas zu senden:

cat <some_short_file> > /dev/ttyS1

gibt wahrscheinlich ein aus I/O error, da kein Treiber angeschlossen ist. Dasselbe für ttyS0funktioniert normalerweise. Das >im Befehl leitet die Ausgabe des catBefehls an den seriellen Port um. cp shortfile /dev/ttyS0funktioniert auch.

EDIT: ttyS1-S3 sind physisch nicht vorhanden, also nein, Sie können sie nicht verwenden. Es gibt andere Geräte, die Sie als virtuelle Ports verwenden können, wie Pseudoterminals (pty) und Loop-Geräte. Überprüfen SieWikipediaund dasManpages für PTYs. Wo PTYs Zeichengeräte sind, können Sie Loop-Geräte für die Blockübertragung verwenden (z. B. für virtuelle Datenträger).WikipediaUndManpage-Dokumentation.

Antwort2

Diese Ports sind tatsächlich auf Ihrem Motherboard vorhanden. Sie sind nur nicht mit einem externen Port verbunden, wie dies bei (einigen) Desktops der Fall ist.

verwandte Informationen