目标是使用embedded
界面连接到serial
设备。
到目前为止,我已经使用过:
stty -F /dev/ttyS2 115200 cs8 ixoff
socat readline,history=/etc/socat.history /dev/ttyS2,raw,echo=0
它的效果很好,但之后我发现在system boot
期间有一些选项需要您按下一个键而不按enter
,readline
在那里失败。所以我的想法是将ttyS2
绑定到cons0
,但后来我发现了多个问题,例如无法退出(ctr+c
,ctr+q
ctr+]
甚至esc
不起作用),backspace
和delete
不起作用,字母输入两次,等等。经过一些试验和错误后,我想出了这个:
socat /dev/cons0,raw,echo=0,crnl /dev/ttyS2,raw,echo=0,escape=0x03,crnl
raw
允许单个key press
触发boot option
echo=0
会阻止key press
加倍crnl
会阻止enter
key press
加倍escape=0x03
允许我按quit
ctr+c
问题是,当我退出时,我的cons0
全部都是f **** d,好像它以某种方式保留了raw,echo=0,crnl
设置。我知道这个问题可能对我的场景来说太具体了,但我只需要一种简单的方法来将键击发送到串行,就像我使用putty
(我的平台上不可用)一样。我正在使用socat
,因为它非常轻量级,不需要任何附加库,并且因为显示的命令是使用expect
的更大脚本的一部分。
非常感谢任何想法和建议。
答案 0 :(得分:2)
正如Austin Phillips所说,你可以使用stty sane
来恢复......
...但更好的是,您可以(可能)将其作为socat xxxxx ; stty sane
附加到您的socat命令,并在使用ctrl-c退出时自动恢复
答案 1 :(得分:0)
谢谢,这对我有用!
我只想指出脚本不应该依赖于"静态"控制台识别,因为当expect
生成脚本时,它将具有完全不同的tty
,因此:
socat $(tty),raw,echo=0,escape=0x03 /dev/ttyS2,raw,echo=0,nonblock ; stty sane
编辑:nonblock
也解决了"输入"问题