如何在Linux上创建一个虚拟串行设备 "pipe"?

3
我需要编写一个程序(C ++),使用串口与另一设备进行通信。由于各种原因,这里不再赘述,因此需要一个软件仿真器。为了实现这个目的,软件仿真器需要在另一台机器上运行。我想通过UDP将数据从软件仿真器发送到我的程序所在的机器,并通过另一个串口接口类型程序接收它(即串行tty设备)。
我还想以自动化方式在VM中测试我的程序。理想情况下,我的测试程序也将使用UDP,并使用相同的UDP-串行接口程序在我的测试程序和正在测试的程序之间转发数据。
时间非常紧迫。我真的没有时间学习如何编写和安装内核级设备驱动程序。
如果您能指导我如何创建某种“管道”或“回环”伪串行设备,我将非常感激。
我正在使用Linux。

1
不太确定我是否理解了,但是socat可以创建一个伪终端,并将其上的所有输入/输出传输到一个UDP端口。 - meuh
听起来很完美。我会试一试的。谢谢。 - AlastairG
1个回答

3

感谢meuh提供的提示。

socat UDP:127.0.0.1:5001,bind=127.0.0.1:5000 \
      PTY,link=/dev/ttyS0,raw,echo=0,waitslave

这将监听回环网络接口上的UDP端口5000。接收到的所有数据都会发送到虚拟串行设备/dev/ttyS0。在虚拟串行设备上接收到的所有数据都会发送到UDP地址127.0.0.1:5001。

IP地址可以是远程的。

命令必须以root用户身份运行,连接到串口的进程也必须如此。为避免这种情况,请使用不同的文件路径,例如/tmp/ttyS99。

显然,指定的文件路径不能已经存在。然而,尽管没有任何串行端口,我的PC上有从/dev/ttyS0到/dev/ttyS31的所有串行端口,使用/dev/ttyS0也可以正常工作。我想如果我真的有一个真正的串行端口,这样就行不通了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接