我正在尝试为我的充电控制器开发一些软件,但我唯一可以使用它的设备是我的树莓派(只是因为我不想让我的电脑在楼下)无论如何它通过远程设备上的 /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
但我想其他所有内容都可以逐字记录。