通过socat将linuxterminal从串口转发到TCP

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

首先,我configuration了/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 ,结果不是很好,我从客户端看到terminal要求login,但是有一个直接的答案,我没有input在: ^M^M^M …等等,terminal回答login不正确,然后一次又一次地是一回事。

我知道^M表示回车符号,但我不太清楚如何解决这个问题。 我尝试了不同的socatconfiguration,但是没有一个能够正确工作。

经过几个小时的深入研究和testing许多不同的select,我带来了一个解决scheme。

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

ttyS1

在文件/etc/securetty

没有这个,你不能在/dev/ttyS1loginterminal。

其次,我testing了许多不同的socatconfiguration,下面的命令工作:

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

但是,这个解决scheme并不完美。 terminal在每个命令提示符后断开线路,以便在下一行input用户input。 而且,执行完每个命令之后,会出现一个空的命令提示符(就像我刚才input的命令后立即input了空命令一样)。

我想我应该用stty正确configuration/dev/ttyACM0 ,但是我仍然在研究这个话题。