Gibt es eine Möglichkeit, eine Verbindung zu einem seriellen Terminal herzustellen, wie Sie es mit SSH tun würden? Es muss einen einfacheren Weg geben als solche Tools wie Minicom
$ serial /dev/ttyS0
Ich weiß, dass ich cat
die Ausgabe von kann, /dev/ttyS0
aber auf diese Weise ist nur eine Art der Kommunikation möglich, vom Port zur Konsole. Und echo
raus zum Hafen ist genauso, aber umgekehrt, zum Hafen.
Wie kann ich unter Unix / Linux auf einfachste Weise eine bidirektionale Kommunikation mit einer seriellen Schnittstelle realisieren?
command-line
terminal
tty
serial-port
serial-console
ihatetoregister
quelle
quelle
Antworten:
Ich finde
screen
das nützlichste Programm für die serielle Kommunikation, da ich es sowieso für andere Dinge verwende. Dies ist normalerweise nurscreen /dev/ttyS0 <speed>
der Fall, obwohl die Standardeinstellungen für Ihr Gerät möglicherweise unterschiedlich sind. Sie können auch alles in die Sitzung leiten, indem Sie in den Befehlsmodus wechseln und tunexec !! <run some program that generates output>
.quelle
screen
ist großartig, aber ich denke nicht, dass es einfacher ist alsminicom
:-)Hintergrund
Der Hauptgrund, warum Sie ein Programm
minicom
für die Kommunikation über eine serielle Schnittstelle benötigen, ist, dass die Schnittstelle eingerichtet werden muss, bevor eine Verbindung hergestellt werden kann. Wenn es nicht richtig eingerichtet wäre , würden die Befehlecat
undecho
nicht das tun, was Sie erwartet hätten. Beachten Sieminicom
, dass der Port mit den verwendeten Einstellungen belassen wird , sobald Sie ein Programm wie dieses ausführenminicom
. Sie können die Kommunikationseinstellungen mit demstty
Programm wie folgt abfragen :Wenn Sie es richtig gemacht haben; Nach dem Booten des Computers und vor dem Ausführen eines anderen Programms werden
minicom,
die Kommunikationseinstellungen auf die Standardeinstellungen zurückgesetzt. Diese unterscheiden sich wahrscheinlich von denen, die Sie für die Herstellung Ihrer Verbindung benötigen. In dieser Situation führt das Senden der Befehlecat
oderecho
an den Port entweder zu Müll oder funktioniert überhaupt nicht.Führen Sie das Programm nach der Verwendung
stty
erneut ausminicom
, und Sie werden feststellen, dass die Einstellungen auf die vom Programm verwendeten Werte eingestellt sind.Minimale serielle Kommunikation
Grundsätzlich sind zwei Dinge erforderlich, um eine bidirektionale Kommunikation über einen seriellen Port zu ermöglichen: 1) Konfigurieren des seriellen Ports und 2) Öffnen des Pseudotty-Lese- / Schreibzugriffs.
Das grundlegendste Programm, von dem ich weiß, dass es das tut, ist
picocom
. Sie können auch ein Tool verwendensetserial
, um den Port einzurichten und dann direkt über die Shell mit ihm zu interagieren.quelle
picocom
Außerdem können Sie eine Verbindung zu einem seriellen Anschluss herstellen, ohne ihn neu zu konfigurieren (--noinit
), und das Programm beenden, ohne die Konfiguration des seriellen Anschlusses wiederherzustellen (--noreset
oder mitCtrl-A
/Ctrl-Q
zu beendenpicocom
). Ich habe festgestelltpicocom
, dass es viel einfacher zu bedienen ist alsminicom
. Aus Gründen, die ich nicht herausgefunden habe, sendet oder empfängt minicom manchmal einfach keine Daten an einem Port, der kurz zuvor funktioniert hat oder mit dem picocom keine Probleme hat. Es ist wahrscheinlich eine arkane Konfigurationsoption, aber was auch immer es ist, ich kann es nicht herausfinden (und dieses Verhalten ist auf mehr als einem Computer aufgetreten).--omap crcrlf --echo
Optionen verwendenWenn UUCP auf dem System installiert ist, können Sie den Befehl cu verwenden , z
quelle
~^D
oder~.
zum Verlassen.Ich fand einen Weg , einen Shell - Skript hier , die setzten
cat
als Hintergrundprozess und eine while - Schleife, die die Benutzereingabe lesen undecho
es an dem Port aus. Ich habe es allgemeiner modifiziert und es passte perfekt zu meinem Zweck.quelle
$?
Wird auf den Exit-Code des letzten Befehls ohne Hintergrund erweitert (in diesem Fallstty -F $1 $2
), sodass er auf 0 erweitert wird, wenn kein Fehler aufgetreten ist. So wird die letzte Zeile,kill 0
die wiederum die aktuelle Shell und alle ihre untergeordneten Objekte zu töten scheint (in interaktiven Shells verhält es sich meiner Meinung nach anders). Für alle Details siehe die folgende Erklärung: unix.stackexchange.com/questions/67532/…while
Schleife sauber beendet. Wenn Sie es mit Strg + C oder mit demkill
Befehlcat
beenden, bleibt der Prozess am Leben. Um das zu beheben, müssten Sie dentrap
Befehl verwenden, um ihn auszuführen,kill $bgPid
wenn die Shell beendet wird, wie es mein Skript unten tut . Ehrlich gesagt hätte ich nichts dagegen, wenn Sie einfach mein gesamtes Skript zu Ihrem Beitrag hinzugefügt hätten. Das habe ich versucht, aber die Bearbeitung wurde abgelehnt.Versuchen Sie es unter http://tio.github.io
"tio" ist eine einfache TTY-Terminalanwendung, die über eine einfache Befehlszeilenschnittstelle verfügt, über die eine einfache Verbindung zu TTY-Geräten für die grundlegende Eingabe / Ausgabe hergestellt werden kann.
Typische Verwendung ist ohne Optionen. Zum Beispiel:
Welches entspricht den häufig verwendeten Optionen:
Es wird mit vollständiger Unterstützung für die automatische Vervollständigung der Shell für alle Optionen geliefert.
quelle
msys2
Windows und Sie können installierentio
mit ,pacman -S tio
weil es standardmäßig unter den verfügbaren Paketen ist.screen
,picocom
usw. sind es nicht. Vielen Dank!Dieses Skript basiert auf einer anderen Antwort , sendet jedoch alles über die serielle Schnittstelle (außer Strg + Q), nicht nur einzelne Befehle, gefolgt von Enter. Dies ermöglicht es Ihnen, Strg + C oder Strg + Z auf dem Remote-Host zu verwenden und interaktive "GUI" -Programme wie aptitude oder alsamixer zu verwenden. Es kann durch Drücken von Strg + Q beendet werden.
quelle
Übrigens enthält das Putty-Paket (das unter Linux ausgeführt wird) serielle Unterstützung.
quelle
Ein weiteres Problem, das auftreten kann, ist, dass Ihr Benutzerkonto möglicherweise auf die Gruppe "Einwählen" festgelegt werden muss, um auf den seriellen Anschluss zuzugreifen.
quelle
Putty funktioniert gut unter Linux und bietet einige Vorteile, insbesondere für die serielle Kommunikation. Es hat einen Nachteil, den ich nicht direkt lösen konnte: Kein Kopieren und Einfügen aus dem Putty-Fenster. Die Windows-Version hat eine schöne Funktion zum automatischen Kopieren in die Zwischenablage bei Hervorhebung, Rechtsklick zum Einfügen (und es gibt ausgezeichnete Plugins für Chrome und Firefox, um das gleiche Verhalten zu ermöglichen), aber unter Linux wird AFAIK nicht geliebt.
Wenn das Fehlen einer Kopie ein Problem ist (es ist für mich),
# tail -f putty.log
aktivieren Sie die Anmeldemethode und öffnen Sie ein Standard-Terminalfenster. Für die Standard-Copypasta-Aktion steht bidirektionaler Text zur Verfügung.quelle
Wie bereits erwähnt, können Sie Picocom ausprobieren. Das neueste Release (2.0) kann auch (sicher) zum Einrichten eines "Terminalservers" verwendet werden, da es keine Shell-Befehlsinjektion mehr zulässt. Sehen:
https://github.com/npat-efault/picocom/releases
quelle
Es hängt davon ab, was Sie tun möchten. Möchten Sie eine Shell oder Anwendung interaktiv vom Terminal aus ausführen, über die serielle Leitung eine Verbindung zu einem anderen Computer herstellen und die Kommunikation mit einem Gerät über eine serielle Schnittstelle automatisieren?
Wenn Sie bidirektionale Kommunikation möchten, möchten Sie vermutlich etwas Interaktives mit einem Menschen auf dem Terminal. Sie können das System so konfigurieren, dass Anmeldungen von einem Terminal über einen seriellen Port zugelassen werden, indem Sie eine getty (1) -Sitzung auf dem seriellen Port einrichten. Getty ist das Tool zum Einrichten eines Terminals und zum Zulassen von Anmeldungen darauf. Fügen Sie einen Eintrag in Ihre inittab (5) -Datei ein, um ihn auf der entsprechenden seriellen Schnittstelle auszuführen
respawn
.Wenn Sie eine Verbindung zu einem Gerät herstellen und automatisierte bidirektionale Konversationen initiieren möchten, können Sie feststellen, ob Sie mit der Erwartung das bekommen, was Sie wollen. Verwenden Sie stty (1) , um den Port auf die richtige Parität, Baudrate und andere relevante Einstellungen zu konfigurieren.
Wenn Sie über die serielle Schnittstelle interaktiv mit einem anderen Computer kommunizieren möchten, benötigen Sie eine Terminalemulationssoftware. Dies macht eine ganze Menge aus - es richtet den Port ein, interpretiert ANSI oder andere Terminalbefehlssequenzen (ANSI war bei weitem nicht der einzige Standard, der von seriellen Terminals unterstützt wird). Viele Terminalemulatoren unterstützen auch Dateiübertragungsprotokolle wie Kermit oder Zmodem.
Die Ein- und Ausgänge der seriellen Kommunikation und der Terminal-E / A sind recht komplex. Im seriellen Howto können Sie mehr lesen, als Sie jemals zu diesem Thema wissen wollten.
quelle
Vielleicht möchten Sie einen Blick darauf werfen
http://serialconsole.sourceforge.net
Pro: hat keine offensichtliche Sicherheitsprobleme wie minicom oder picocom (wenn Sie die Benutzer - Shell - Zugang, kein Problem geben nicht ein Problem haben, aber Sie wahrscheinlich tun ein, wenn Sie einen Terminalserver einrichten möchten ... )
quelle
Sie müssen sicher sein, dass Sie über die richtigen Lese- und Schreibberechtigungen für das Gerät verfügen. Diese können Sie folgendermaßen anzeigen:
Ich verlasse mich auf das Skript, das Sie gefunden und einige Änderungen vorgenommen haben.
Für die Entwicklungssysteme, die ich bisher verwendet habe, brauchten sie:
Diese Werte sind die Standardwerte im Skript.
Um eine Verbindung herzustellen, können Sie sie wie folgt verwenden:
Beispiel:
Skript:
PS: Sie müssen wissen, welche Art von Zeilenvorschub Ihr Empfängersystem verwendet, da dies bestimmt, wie Sie die Befehle in meinem Fall senden müssen. Ich benötigte ein Windows wie LF, dh, ich muss senden
ASCII-Werte für:
quelle
#!/bin/sh
wird ignoriert, wenn es nicht die erste Zeile der Datei ist. (2) Ernsthaft? Sie verwenden1
, um gerade Parität und ungerade2
anzugeben ? (3) Es ist üblich, eine "Verwendungs-" oder "Hilfemeldung" zu haben, die alle Parameter dokumentiert , nicht nur die obligatorischen. (4) Sie sollten immer Ihre Shell Variablenreferenzen zitieren (zB , , , , , , , und auch und ) es sei denn , Sie haben einen guten Grund nicht zu, und du bist sicher , dass Sie wissen , was Sie tun."$1"
"$2"
"$3"
"$4"
"$stopb"
"$par"
"$bgPid"
"$?"
"$!"
Da es hier nicht bereits erwähnt wird, möchte ich auch erwähnen
socat
- weitere Informationen unter https://stackoverflow.com/questions/2899180/how-can-i-use-com-and-usb-ports-within-cygwin :oder
(obwohl ich das Problem hatte , es zu stoppen, sobald es unter MSYS2 unter Windows gestartet wird)
quelle
Ich frage mich, warum niemand ser2net erwähnt hat .
Beispiel
/etc/ser2net.conf
:Sie können eine Verbindung zum seriellen Port herstellen, wie folgt:
Oder aus der Ferne:
Oder richten Sie die Portweiterleitung auf Ihrem Router ein und stellen Sie sie dem Internet zur Verfügung, damit Sie von überall aus eine Verbindung herstellen können (lassen Sie uns Sicherheitsprobleme überspringen, ich spreche von Flexibilität).
quelle
Eine andere einfache Möglichkeit ist, über ssh mit dem
-X
Flag auf die Maschine zuzugreifen und ein Programm wie putty oder gtkterm auszuführen.Damit:
Es sollte die grafische Oberfläche auf Ihrem Client-PC starten und von dort aus können Sie auf die serielle Schnittstelle zugreifen, als wären Sie auf dem Host.
Haftungsausschluss: Nur mit Ubuntu-Maschinen ausprobiert. Ich vermute, dass es mit Maschinen ohne grafische Oberflächen nicht funktioniert.
Aus dem SSH-Handbuch:
Verwenden Sie
-Y
diese Option, wenn die Sicherheit ein Problem darstellt.quelle