使用 socat 进行原始串行连接

Ulr*_*rik 6 linux bash serial-port socat

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

stty -F /dev/ttyS2 115200 cs8 ixoff
socat readline,history=/etc/socat.history /dev/ttyS2,raw,echo=0
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但后来我发现在system boot此期间有一些选项需要您按一个键而不按enter,并且readline在那里失败。所以我的想法是绑定ttyS2cons0,但后来我发现了许多问题,如无法退出(ctr+cctr+q ctr+]甚至esc无法正常工作),backspacedelete没有工作,来信使一些试验和错误后输入两次,等等,我想出了这个:

socat /dev/cons0,raw,echo=0,crnl /dev/ttyS2,raw,echo=0,escape=0x03,crnl
Run Code Online (Sandbox Code Playgroud)
  • 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.

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

Chr*_*ton 4

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

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