如何通过网络为 /dev/ttyUSB0 设置“USB 代理”?

如何通过网络为 /dev/ttyUSB0 设置“USB 代理”?

我有一个被测设备 (DUT),我使用功率分析仪数据记录器使用来自 的数据/dev/ttyUSB0

问题是 DUT 现在远离我用来收集数据的工作站,但在同一网络中,我需要使用第二台 PC,它通过 USB 直接连接到功率分析仪,作为一种 USB 代理和 ssh在“代理”机器的USB测量机上创建一种符号链接。

在此输入图像描述

鉴于上图,第一台PC如何访问直接连接的/dev/ttyUSB0第二PC,从而使从第一PC 读取流的程序不会注意到差异?

答案1

socat可能在这里工作。

在第二台 PC 上,您可以socat监听数据/dev/ttyUSB0并将其提供给 TCP 端口,例如:

socat /dev/ttyUSB0,raw,echo=0 tcp-listen:8888,reuseaddr

然后,在第一台 PC 上,您可以使用 socat 连接到第二台 PC,并在伪终端上为您的应用程序提供数据/dev/ttyVUSB0

socat PTY,raw,echo=0,link=/dev/ttyVUSB0 tcp:<ip_of_pc2>:8888

这未经测试并且socat支持许多选项,因此可能需要调整。

答案2

ser2net您可以使用和的组合socat。例如,我有一个机器人通过串口连接到树莓派。树莓派连接到我的本地网络(相当于你的第二台电脑)。我的笔记本电脑连接到同一个本地网络(相当于您的第一台电脑)。然后我使用 ser2net 通过 TCP 从第二台 PC 转发串行端口,并创建一个socat在第一台 PC 上使用的代理串行设备文件。

此设置可能也适合您。建议的解决方案:

第 1 步:在第二台 PC 上安装 ser2net 软件包(如下图所示)

sudo apt-get install ser2net

ser2net 侦听 TCP 端口,并能够通过 TCP 端口将数据传入和传出串行端口。您可以通过其配置文件设置要为其创建“代理”的串行端口/etc/ser2net.conf

步骤2:在第二台PC上配置ser2net

例如,如果您有一个/dev/ttyACM0以波特率连接的设备115200,并且希望从本地主机端口 3333 为其提供服务,那么您可以将以下行添加到/etc/ser2net.conf

3333:raw:0:/dev/ttyACM0:115200,remctl

创建配置文件后,然后通过在第二台 PC 上运行来启动 ser2net:

ser2net

或者(如果它已经在运行,则只需按如下方式重新启动它)

/etc/init.d/ser2net restart

这里一件重要的事情是 remctl 选项。它允许客户端(图中的第一台 PC)连接到设备并自由选择串行连接选项。我认为这样从数据收集工作区的角度来看,串行通信是完全透明的。看更多详细信息请点击此处

步骤 3:在数据采集工作站(第一台 PC)上设置代理串行设备文件

(如果你没有 socat,那么sudo apt-get install socat

最后,在第一台 PC 上的终端中socat创建一个将从 tcp 端口侦听的代理串行端口:

socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive

在此示例中ip=<2nd-PC-IP-address>,以及(或您在第二台电脑上port=3333设置时选择的任何内容)。/etc/ser2net.conf

第 4 步:连接到 MyProxySerialPort

现在您应该能够正常打开与$HOME/MyProxySerialPort第一台 PC 上的设备的串行连接。

这篇博文也提供了有关此设置的更多信息:http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/

答案3

在使用符号链接的 Linux 内核中/dev/bus/usb/BUS_ID/DEV_ID/dev/char/主要:次要 索卡特由于不适当的 IOCTL 错误,无法打开此类设备!
所以这种方法似乎不能直接在USB设备上起作用。

我试过usbip这是一个更接近的实现,但仅在较旧的内核上受支持。

由于我的解决方案是关于通过 pcsc-lite 连接的读卡器,因此有一个更好的解决方案,使用环境变量libpcsclite客户。

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

这样就可以指定不同的 unix 域套接字。并且可以使用以下命令将其转发到远程主机上的读卡器套接字索卡特:

在主机上运行此命令以更换读卡器

socat tcp:$CARD_READER_HOST:8888 UNIX-LISTEN:$PCSCLITE_CSOCK_NAME,fork

在连接了 pcsc 读卡器的 CARD_READER_HOST 主机上运行此命令

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr

相关内容