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

How to create a dummy "pipe" pseudo-serial device on Linux?

我需要编写一个程序 (C++),使用串行端口与另一个设备进行通信。另一个设备甚至还没有构建,所以我需要一个软件模拟器出于各种原因,这里没有意义,软件模拟器需要 运行 在不同的机器上。我想通过 UDP 将数据从软件模拟器发送到我的程序 运行 正在运行的机器,并让另一个串行接口类型的程序接收它,该程序在某种程度上充当串行端口(串行 tty 设备) .

我还想在 VM 中以自动化方式测试我的程序。理想情况下,我的测试程序也将使用 UDP,并使用相同的 UDP 串行接口程序在我的测试程序和被测程序之间来回转发数据。

时间很紧。我真的没有时间学习编写和安装内核级设备驱动程序。

对于如何创建某种“管道”或“环回”伪串行设备的任何指示,我将不胜感激。

我正在研究 Linux。

感谢 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 没有任何串行端口,但我的 PC 从 /dev/ttyS0 一直到 /dev/ttyS31,并且使用 /dev/ttyS0 工作正常。我想如果我真的有一个真正的串行端口,这将无法工作。