使用socat将Linux终端从串口转发到TCP

Modified on: Mon, 25 Mar 2019 02:20:02 +0800

我正在开发嵌入式ARM平台Slackware。我正在使用G24 Java调制解调器,它被配置为在端口/dev/ttyS1/dev/ttyACM0之间转发数据,所以进入任何这些端口的任何东西都是在另一方面可见。我想在其中一个端口/dev/ttyS1上设置终端,并将另一个端口/dev/ACM0转发到TCP端口,因此可以从通过局域网的其他机器。

首先,我配置了/etc/inittab

s2:12345:respawn:/sbin/agetty -L ttyS1 115200 vt100

然后我尝试使用socat和以下命令:

socat -d -d -d TCP-l:2020,reuseaddr,fork /dev/ttyACM0,raw,nonblock,waitlock="/var/run/ttyACM0.lock",b115200,echo=1,icanon=1,crnl

然后我试图从其他机器连接telnet 192.168.1.222 2020,结果不是很好,我从客户端看到终端要求登录,但后来那里是一个我没有输入的直接答案:^M^M^M ...等等,终端正在回答登录不正确,然后一次又一次地回答同样的事情。< / p>

我知道^M表示回车标志,但我不太清楚如何解决这个问题。
我尝试了不同的socat配置,但没有一个能正常工作。

最佳答案

经过几个小时的深入研究和测试后,我找到了一个解决方案。

首先,我必须通过添加行来启用终端:

ttyS1

在文件/etc/securetty

如果没有这个,您无法通过/dev/ttyS1登录终端。

其次,我测试了许多不同的socat配置,以下命令有效:

/usr/local/bin/socat tcp-l:2020,reuseaddr,fork,crlf file:/dev/ttyACM0,echo=0,b115200,raw,crnl,icanon=1 < / p>

然而,这种解决方案并不完美。每个命令提示符后终端都会断行,因此在下一行输入用户输入。此外,在执行每个命令后出现一个空命令提示符(就像我在我输入的命令之后立即输入空命令)。

我想我应该用stty正确配置/dev/ttyACM0,但我还在研究这个话题。

作者:Wookie88

相关问答

添加新评论