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


14

我有一个被测设备(DUT),并使用Power Analyzer Datalogger和中的数据来测量其功耗/dev/ttyUSB0

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

在此处输入图片说明

鉴于上述图如何可以在1 PC访问/dev/ttyUSB0的2 PC直接连接,在一种方式中的程序读出从1流ST PC不会注意到的差异?

Answers:


19

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支持许多选项,因此可能需要进行调整。


3
谢谢!在笔记本电脑上的Docker容器中测试环境-> SSH隧道->无尘室中的PC->无尘室中的AVR编程器和FTDI记录器
Mark K Cowan

2

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

此设置也可能对您有用。建议的解决方案:

步骤1:在第二台PC上安装ser2net软件包(按照您的图表)

sudo apt-get install ser2net

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

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

例如,如果您的设备连接/dev/ttyACM0了baudrate,115200并希望通过localhost端口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在第二台PC上设置时选择的任何位置)。

步骤4:连接到MyProxySerialPort

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

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


非常详细的答案+1
Eduard Florinescu

1

在使用从/ dev / bus / usb / BUS_ID / DEV_ID/ dev / char / MAJOR:MINOR 的符号链接的Linux内核中,由于不适当的IOCTL错误,socat无法打开此类设备!
因此,这种方法似乎不适用于USB设备。

我尝试了usbip,它是更接近的实现,但仅在较旧的内核上受支持。

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

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

这样,可以指定不同的Unix域套接字。并且可以使用socat将其转发到远程主机上的读卡器插槽:

在主机上运行以替换读卡器

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

1
嗨,欢迎您:)。这是有趣的信息,但与/dev/ttyUSB0或不使用PCSCLITE的功率分析仪有关的问题无关。如果您想发布此信息,最好将其作为一个单独的问题。允许并鼓励您发布主题问题,您可以立即获得后续答案。
sourcejedi '17

3
我尝试过,相关信息是建议的答案无效!我认为此信息需要共享。其余的确实不是直接相关的,但是针对相关问题提供了不同的方法。
UV

这是因为:路径中的角色吗?socat的手册页的“地址规范”部分中有一段有关如何转义字符的段落(从v1.5.0开始)。
David Knipe

有趣的一点,但该项目已被屏蔽,因此无法对其进行检查:(
紫外线
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.