“重复”串行设备-从 2 个进程读取/写入

“重复”串行设备-从 2 个进程读取/写入

我有一个串行/RS485 转换器,用于从 Modbus 设备读取/写入。我需要能够从 2 个进程读取和写入。

我怎样才能“复制”真实设备/dev/ttyUSB0以在我的程序中指定虚拟设备,就像我对物理设备所做的那样?例如(/dev/ttyUSB0-1/dev/ttyUSB-2)。

我已经用socat尝试过了:

socat -d -d pty,raw,echo=0,link=/dev/ttyUSB0-1 pty,raw,echo=0,link=/dev/ttyUSB0
socat -d -d pty,raw,echo=0,link=/dev/ttyUSB0-2 pty,raw,echo=0,link=/dev/ttyUSB0

但没有程序得到响应。不确定请求是否到达真正的串行设备。

答案1

使用命令中的第二个 PTY 地址,您可以创建新的 pty,这可能不是您想要做的,相反,您应该像访问文件一样访问现有的 pty。此命令应在物理设备和一个虚拟设备之间转发数据:

  socat -d -d PTY,raw,echo=0,link=/dev/ttyUSB0-1 FILE:/dev/ttyUSB0,raw,echo=0

现在进行复制:Socat 1.8 软件包提供了一个应该有帮助的 shell 脚本。使用这三个命令,例如在不同的终端窗口中:

socat-mux.sh -d -d UNIX-L:/tmp/ttyUSB0,fork FILE:/dev/ttyUSB0,raw,echo=0
socat        -d -d PTY,raw,echo=0,link=/dev/ttyUSB0-1 UNIX:/tmp/ttyUSB0
socat        -d -d PTY,raw,echo=0,link=/dev/ttyUSB0-2 UNIX:/tmp/ttyUSB0

第一个命令打开 tty 并启动侦听器;任意数量的客户端都可以连接,数据将从客户端转发到 tty,再从 tty 转发到客户端(内部此脚本使用环回接口上的 UDP 广播进行复制)。socat-mux 侦听器只能提供一个被动(侦听)地址,并且必须分叉,因此我们不能在这里使用 pty,而需要使用 UNIX 域套接字的技巧。第二和第三个命令在伪终端和 UNIX 套接字之间换行。/dev/ttyUSB0-1 和 /dev/ttyUSB0-2 现在可以按您的意愿访问。

相关内容