How create a virtual io device in Linux that proxies data to real device?

19,767

Solution 1

I ended up using socat

Examples can be found here: socat examples

You socat back to back on both the machines. One listens on a tcp port and forwards data to local virtual port or pty. The socat on other box uses real device as input and forwards any data to tcp port.

Solution 2

Take a look at openpty(3). This lets you create a pseudo-TTY (like /dev/pts/0, the sort that ssh connections use), which will respond as a normal TTY would, but give you direct programmatic control over the connections.

This way you can host a serial device (eg. /dev/pts/5) that you forward data between a network connection, and then other apps can perform serial operations on it without knowing about the underlying network bridge.

Share:
19,767

Related videos on Youtube

videoguy
Author by

videoguy

Updated on June 04, 2022

Comments

  • videoguy
    videoguy almost 2 years

    I have an interesting problem. I am working on an embedded box with multiple instances of Linux running each on an ARM processor. They are connected over internal 1GBps network. I have a serial port device node attached to processor A (Lets say Linux-A running on it). I have a program running on processor B (Lets say on Linux-B) access the serial port device as if it is attached to Linux-B locally.
    My program invokes term i/o type api calls on device node to control tty echo, character mode input. What I am wondering is if there is a way to create a virtual serial device that is available on Linux-B somehow talking to real serial device on Linux-A over internal network.

    I am thinking something along the lines of: Linux-B has /dev/ttyvirtual. Anything that gets written to it gets transported over network socket to Linux-A serialserver. The serial server exrcises the api calls on real device lets say /dev/ttys0. Any data waiting on ttys0 gets transported back to /dev/ttyvirtual.

    What are all the things involved to get this done fast?

    Thanks
    Videoguy

    Update: I found a discussion at http://fixunix.com/bsd/261068-network-socket-serial-port-question.html with great pointers.
    Another useful link is http://blog.philippklaus.de/2011/08/make-rs232-serial-devices-accessible-via-ethernet/

  • mrid
    mrid almost 4 years
    is there a way i can create ports of the format ttyS1 or something ? because many software available show only these kind of ports for selection