Ale*_*lex 6 linux redirect stdin pipe tty
在Linux BusyBox 命令中存在microcom与串行调制解调器通信的命令:
BusyBox v1.13.2 (2012-05-10 17:13:08 CEST) multi-call binary
Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPEED] [-X] TTY
Copy bytes for stdin to TTY and from TTY to stdout
Options:
-d Wait up to DELAY ms for TTY output before sending every next byte to it
-t Exit if both stdin and TTY are silent for TIMEOUT ms
-s Set serial line to SPEED
-X Disable special meaning of NUL and Ctrl-X from stdin
Run Code Online (Sandbox Code Playgroud)
我没有使用stdin来键入AT命令,而是将它们放入文本文件并将该文件的内容重定向为上述命令的stdin.例如,我有一个文件
/tmp/at.txt
Run Code Online (Sandbox Code Playgroud)
使用AT命令AT,通常由TTY确认OK.与stdin的标准会话看起来像:
microcom -t 3000 -X /dev/ttyS5
at
OK
Run Code Online (Sandbox Code Playgroud)
其中字符串at直接在键盘上输入.为了使用文件的内容/tmp/at.txt(仅包含'at \n').去做这个,.我尝试了以下变化:
microcom -t 3000 -X /dev/ttyS5 < /tmp/at.txt
microcom -t 3000 /dev/ttyS5 < /tmp/at.txt
cat /tmp/at.txt | microcom -t 3000 /dev/ttyS5
tail -f /tmp/at.txt | microcom -t 3000 /dev/ttyS5
cat /tmp/at.txt | microcom -t 3000 /dev/ttyS5 -X
tail -f /tmp/at.txt | microcom -t 3000 /dev/ttyS5 -X
Run Code Online (Sandbox Code Playgroud)
并且它们都没有工作,即这些命令都没有在屏幕上返回"OK"文本.因此,我得出结论,将文件内容重定向/tmp/at.txt为命令的stdin 存在一些问题microcom.可能与如何解释行尾或文件结尾有关.如果有人有一些想法,我会很感激一些帮助.
谢谢,
亚历克斯
小智 5
我在SliTaz 4.0下的BusyBox v1.18.4中运行微型计算机并重复了问题然后解决了它.如果要在此级别模拟键盘输入,则每个行之后必须具有完整的CRLF,因为键盘键会发送^ M(0x0D).大多数ASCII编辑器编写的Linux标准0x0A是不够的.
有很多方法可以做到但我只是在每一行的末尾创建了一个带有额外字节的takefile,然后使用ncurses-hexedit程序将字节切换为0x0D.我测试了上面的命令,并从这样的文件输入得到了一个OK响应.
希望这可以帮助.
你需要以特殊字符\ r结束AT命令
echo "AT+CIMI\r" | microcom -t 2000 /dev/ttyS5
Run Code Online (Sandbox Code Playgroud)
随着\n这是行不通的
素不相识