2012-06-25 13 views
9

Ich habe ein interessantes Problem. Ich arbeite an einer eingebetteten Box mit mehreren Instanzen von Linux, die jeweils auf einem ARM-Prozessor laufen. Sie sind über interne 1GBps Netzwerk verbunden. Ich habe einen Geräteknoten für den seriellen Port, der an den Prozessor A angeschlossen ist (sagen wir, Linux-A läuft darauf). Ich habe ein Programm, das auf Prozessor B läuft (sagen wir auf Linux-B), um auf das serielle Gerät zuzugreifen, als wäre es lokal an Linux-B angeschlossen.
Mein Programm ruft Term-i/o-Typ-API-Aufrufe auf dem Geräteknoten auf, um tty echo, Zeichenmodus-Eingabe zu steuern. Ich frage mich, ob es eine Möglichkeit gibt, ein virtuelles serielles Gerät zu erstellen, das auf Linux-B verfügbar ist und irgendwie mit einem echten seriellen Gerät auf Linux-A über ein internes Netzwerk kommuniziert.
Wie erstellen Sie ein virtuelles io-Gerät in Linux, das Daten an ein echtes Gerät überträgt?

Ich denke etwas in Richtung: Linux-B hat/dev/ttyvirtual. Alles, was darauf geschrieben wird, wird über den Netzwerk-Socket an Linux-A serialserver übertragen. Der serielle Server erbt die API-Aufrufe auf einem echten Gerät, sagen wir/dev/ttys0. Alle Daten, die auf ttys0 warten, werden zurück nach/dev/ttyvirtual transportiert.

Was sind all die Dinge beteiligt, um dies schnell zu erledigen?

Dank
Videoguy

Update: fand ich eine Diskussion auf http://fixunix.com/bsd/261068-network-socket-serial-port-question.html mit großen Zeigern.
Eine weitere nützliche Verbindung ist http://blog.philippklaus.de/2011/08/make-rs232-serial-devices-accessible-via-ethernet/

+0

Diagramm wäre hilfreich;) – Merlin

Antwort

7

landete ich socat

Beispiele verwenden kann hier gefunden werden: socat examples

Sie socat zurück auf beiden Maschinen zu sichern. Man hört auf einen tcp-Port und leitet Daten an den lokalen virtuellen Port oder pty weiter. Die Socat-on-Box verwendet ein echtes Gerät als Eingabe und leitet alle Daten an den TCP-Port weiter.

8

einen Blick auf openpty(3) nehmen. Dadurch können Sie eine Pseudo-TTY erstellen (wie /dev/pts/0, die Art, die SSH-Verbindungen verwenden), die wie eine normale TTY reagieren würde, aber Sie direkte programmatische Kontrolle über die Verbindungen geben.

Auf diese Weise können Sie ein serielles Gerät (z. B. /dev/pts/5) hosten, das Daten zwischen einer Netzwerkverbindung weiterleitet, und dann können andere Apps serielle Vorgänge darauf ausführen, ohne die zugrunde liegende Netzwerkbrücke zu kennen.

Verwandte Themen