6

embedded目标是使用serial接口连接到设备。到目前为止,我已经使用过:

stty -F /dev/ttyS2 115200 cs8 ixoff
socat readline,history=/etc/socat.history /dev/ttyS2,raw,echo=0

它工作得很好,但后来我发现在此期间有一些选项system boot要求您按一个键而不按enter,并readline在那里失败。所以我的想法是绑定ttyS2to cons0,但后来我发现了多个问题,比如无法退出(ctr+cctr+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允许我quitctr+c

问题是,当我退出时,我cons0的一切都搞砸了,好像它以某种方式保留了raw,echo=0,crnl设置。我知道这个问题对于我的场景来说可能太具体了,但我只需要一种简单的方法来像我一样将击键发送到串行putty(这在我的平台上不可用)。我使用socat它是因为它非常轻量级,不需要任何额外的库,而且显示的命令是使用expect.

非常感谢任何想法和建议。

4

2 回答 2

4

谢谢,这对我有用!我只想指出,脚本不应该依赖“静态”控制台识别,因为当expect生成脚本时,它会有一个完全不同的tty,因此:

socat $(tty),raw,echo=0,escape=0x03 /dev/ttyS2,raw,echo=0,nonblock ; stty sane

编辑:nonblock也解决了“输入”问题

于 2014-10-15T03:06:35.993 回答
4

正如奥斯汀菲利普斯所说,你可以stty sane用来恢复......

...但更好的是,您可以(可能)将其附加到您的 socat 命令中,并在您使用 ctrl-c 退出时自动socat xxxxx ; stty sane恢复。

于 2014-10-15T02:29:43.887 回答