一尘不染

Linux下的伪串行通信

linux

我有一个应用程序,我想在其中模拟设备和“调制解调器”之间的连接。该设备将连接到串行端口,并通过该端口与软件调制解调器通信。

为了进行测试,我希望能够使用模拟软件设备来测试发送和接收数据。

示例Python代码

device = Device()
modem  = Modem()
device.connect(modem)

device.write("Hello")
modem_reply = device.read()

现在,在我的最终应用程序中,我将仅传递/dev/ttyS1或COM1或任何供应用程序使用的内容。但是,如何在软件中执行此操作?我正在运行Linux ,应用程序是用 Python 编写的。

我试过制作一个FIFO(mkfifo~/my_fifo),它确实起作用,但是随后我将需要一个FIFO来进行写入,而需要一个FIFO来进行读取。我想要的是打开~/my_fake_serial_port并对其进行读写。

我也对该pty模块付了款,但是也不能使它正常工作。我可以从中获取主文件和从文件描述符,pty.openpty()但是尝试读取或写入它们只会导致IOErrorBad File Descriptor错误消息。

更新资料

注释将我引向SO问题,在Linux中是否有像COM0COM这样的程序?其使用socat设置一个虚拟串行连接。我这样使用它:

socat PTY,link=$HOME/COM1 PTY,link=$HOME/COM2

对于其他人,谢谢您给我的宝贵信息。我选择接受 _VinaySajips_的回答,因为那是我在socat建议出现之前所寻求的解决方案。看来效果很好。


阅读 179

收藏
2020-06-07

共1个答案

一尘不染

这也可能是最好使用pyserial与串行端口进行通信,并且你可以创建一个模拟版本,serial.Serial它实现了类readreadlinewrite你需要和任何其他方法。

2020-06-07