Virtuelle serielle Schnittstellen mit socat (auch für Virtualbox)

Falls man mal zum Testen irgendwelcher kruden Programme eine serielle Schnittstelle so nachbilden will, dass das zu testende Programm meint, es spricht mit einer seriellen Schnittstelle, diese aber in Wirklichkeit nur virtuell ist, hilft das unix- tool socat

Mit

socat PTY,link=/tmp/DXM PTY,link=/tmp/OOBD

werden im System die beiden symbolischen Links /tmp/DXM und /tmp/OOBD als scheinbare ttyS- Schnittstellen angelegt, solange der socat - Prozess läuft.

Dann trägt man /tmp/DXM als Name der zu verwendenden seriellen Schnittstelle in das zu testende Programm ein und verbindet z.B. sein Terminalprogramm mit /tmp/OOBD, und fertig ist die Laube

Virtuelle serielle Schnittstelle in VirtualBox

In den Settings von Virtualbox verbindet man die COM- Schnittstelle mit einer pipe (/tmp/vboxcom1) und läßt Virtualbox diese Pipe erstellen.

Dann kann man socat damit verbinden:

socat UNIX-CONNECT:/tmp/vboxcom1 PTY,link=/tmp/OOBD

Zum Schluß muß man im Windows XP Gast unter „Systemsteuerung/Hardware hinzufügen/Hardware aus Liste hinzufügen“ beim nächsten Start der VM den gerade neu erschaffenen COM- Port Windows noch bekannt machen

Zwei Programme über Socat verbinden

Manchmal muß man z.B. von Kommunikationsprogrammen, zwei Programme so miteinander verbinden, dass stdout des einen zum stdin des anderen wird und umgekehrt. Mit Socat geht das z.B. folgermaßen:

Terminal1:
socat TCP:127.0.0.1:3333 exec:"java YModem1K README"
Terminal2:
socat TCP-LISTEN:3333 exec:"rz --ymodem"

Ausgabe vom seriellen Port auf stdout umleiten

So füttert man Programme über stdin mit den vom seriellen Port kommenden Daten:

socat /tmp/DXM,raw,echo=0,crnl - | python ....