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

Woo*_*e88 7 terminal port-forwarding tcp embedded-linux socat

我正在研究嵌入式 ARM 平台 Slackware。我正在使用 G24 Java 调制解调器,该调制解调器配置为在端口/dev/ttyS1和之间转发数据/dev/ttyACM0,因此进入任何这些端口的任何内容都可以在另一个端口上看到。我想在这些端口之一上设置终端,/dev/ttyS1并将另一个端口转发/dev/ACM0到 TCP 端口,以便可以通过 LAN 从其他机器访问它。

首先,我配置了/etc/inittab

s2:12345:respawn:/sbin/agetty -L ttyS1 115200 vt100
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过以下命令使用 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...等,终端回答登录不正确,然后一次又一次地回答同样的事情。

我知道这^M意味着回车符,但我不太确定如何解决这个问题。我尝试了不同的 socat 配置,但没有一个能正常工作。

Woo*_*e88 4

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

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

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

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

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