使用远程串口作为本地串口

使用远程串口作为本地串口

我正在尝试为我的充电控制器开发一些软件,但我唯一可以使用它的设备是我的树莓派(只是因为我不想让我的电脑在楼下)无论如何它通过远程设备上的 /dev/ttyUSBX 进行通信。

我希望我可以在本地计算机上创建一个虚拟串行端口并通过 SSH 连接它,最好是否则未加密也可以。另外,如果它可以是一个守护进程也很好,这样它就可以像一个完整的直通一样。

我研究过 socat 和 ser2net,但要么没有数据通过,要么 socat 在发送一个命令后会关闭。我也四处寻找教程,但它通常只显示客户端的示例,而不是远程的示例。因此,如果您能为服务器和客户端提供一个示例,我们将不胜感激。

答案1

请注意,“虚拟串口”是 Windows 术语; Linux 没有“虚拟串口”。

Linux拥有的是支持附加s的文件ioctl;如果您不需要这些,您可以尝试使用诸如 之类的工具进行重定向socat

如果您确实需要这些,我不知道解决方案。然而,你什么要做的是通过网络透明地转发 USB 设备,例如usbip。大多数 Linux 发行版都会将 usbip 作为软件包包含在内。

因此,您将远程设备上的USB串口视为本地USB设备,然后/dev/ttyUSBX在本地设备上进行访问。

这还将双向转发代表 DTR、RTS 等操作的 USB 数据包。

答案2

我仔细阅读man socat揭示了以下示例:

socat PTY,link=$HOME/vmodem0,rawer,wait-slave \
    EXEC:"ssh modemserver.us.org socat - /dev/ttyS0,nonblock,rawer"

记录为:

- generates  a pseudo terminal device (PTY) on the client that can
be reached under the symbolic link $HOME/vmodem0.  An appli‐
cation that expects a serial line or modem can be configured to
use $HOME/vmodem0; its traffic will be directed to a  modem‐
server  via  ssh  where  another  socat  instance  links  it  to
/dev/ttyS0.

因此,PC 运行 a socat,分配 a 的pty链接 at $HOME/vmodem0,然后通过命令的 stdin/stdout 进行通道传输,该命令在远程端ssh运行,以将 stdin/stdout 传输到/从(远程)进行类似(但相反)的传输。在括号中,手册页建议使用作为链接名称,但为了方便起见,我缩短了它。socat/dev/ttyS0$HOME/dev/vmodem0

显然,您需要调整命令以使用您的树莓派 IP 而不是modemserver.us.org, 和/dev/ttyUSBX/dev/ttyS0但我想其他所有内容都可以逐字记录。

相关内容