A virtual serial port is a redirector without network software support which is usually used to create a pair of back-to-back virtual COM ports on the same computer. Two legacy applications can then communicate using virtual serial ports instead of conventional inter-process communication mechanisms such as named pipes.
This type of software is capable of emulating all serial port functionality, including Baud rate, data bits, parity bits, stop bits, etc. Additionally, it allows the data flow to be controlled, emulating all signal lines (DTR/DSR/CTS/RTS/DCD/RI) and customizing pinout.
Often I write software for embedded devices, and they have to exchange data with a PC. Since the devices often, if we don't want to say "always", aren't available during the development phase I have to simulate the connection in other ways. When I have to use UARTs to communicate, I use a tool which generates 2 virtual ports and then joins them back to back.
The software I use on Linux is socat, it is a very complex software and it can do a lot of other things, maybe in another article I'll show other functionalities of socat.
Socat Man Page: "Socat is a command line based utility that establishes two bidirectional byte streams and transfers data between them. Because the streams can be constructed from a large set of different types of data sinks and sources (see address types), and because lots of address options may be applied to the streams, socat can be used for many different purposes."
However let’s try socat:
Installation on Ubuntu
To install socat on Ubuntu (I'm using 12.04) just run the following command:
# sudo apt-get install socat
Setting up two serial lines
now on a terminal window run socat
# socat -d -d PTY: PTY:
The output should look like the following one:
2013/09/20 14:07:10 socat[6871] N PTY is /dev/pts/5 2013/09/20 14:07:10 socat[6871] N PTY is /dev/pts/6 2013/09/20 14:07:10 socat[6871] N starting data transfer loop with FDs [3,3] and [5,5]
Now you have two "serial" ports connected back to back
Testing the ports
open a new terminal and issue the following command
# sudo cat /dev/pts/5
open a new terminal and issue the following command
# sudo echo "Hello World" > /dev/pts/6
On the first terminal you should see the string “Hello World”.
That’s all, nothing more.
Gg1
This is absolutely genius! Thank you for this post!
I keep getting this error using this last command
syntax error near unexpected token `&’
please help
Hi Moka,
due to the change of the syntax highlighter there were problems showing escape sequences.
Let’s try now.
Thanks for the tip.
On my machine (Ubuntu 14.04), running the socat pty creation command threw error –
E PTY: wrong number of parameters (1 instead of 0)
Replacing PTY: PTY: by PTY PTY solved the issue.
This is something I am also trying to use to test a modbus application which communicates with a slave over a UART. Basically the master sends a command to the slave over the UART and the slave responses to confirm the command.
So I would like to know that can I also transmit from the other port or not ? Or does that port only recieves.
Sorry if it is a dumb question but I am really new to this and learning.