我正在寻找一种方法,从 Raspberry PI 上默认的 Debian Linux 中的 shell 脚本发送串行 BREAK,而无需下载或编译任何其他软件。
不幸的是,该发行版似乎没有 SETSERIAL 或 MINITERM,这两者都可以使这变得简单。
请注意,这对于 C 程序来说很简单,也可以通过 Python 程序来执行 - 但我真的在寻找一种仅使用 shell 来执行此操作的方法,既出于美观的原因,也因为我自己无法弄清楚...:)
—乔希
答案1
我相信当前的 Raspbian 仍未附带screen
任何内容。如果附带,您可以运行screen /dev/ttyWhatever
并点击Ctrl-a
b
。参考。
中断特定于串行接口,并且没有控制/转义字符表示,因此通用的echo
和cat
朋友没有发送中断的机制。因此,您能做的最好的事情就是用您最喜欢的编程语言调用串行库。我相信 Raspbian 附带 Python,可能还有 Perl,也许还有 gcc,所以这三个中的任何一个都可以解决问题:
Python
python -c 'import termios; termios.tcsendbreak(3, 0)' 3>/dev/yourdevicename
Perl
perl -e 'use POSIX; tcsendbreak(3, 0)' 3>/dev/yourdevicename
C
#include <termios.h>
#include <fcntl.h>
int main() { tcsendbreak(open("/dev/yourdevicename", O_RDWR), 0); }
最后,如果你真的想要使用内置功能,请将串行设备的波特率设置为远低于标准,然后发送 NULL。例如:
stty -F /dev/yourdevicename 9600
echo -ne '\0' > /dev/yourdevicename
答案2
由于我的代表原因,我无法对您的帖子发表评论,但如果您需要使用调制解调器发送中断,则以下方法可行。如果您只是尝试通过 RS-232 发送中断,则不会成功。
如果您可以向 发送 AT 命令/dev/ttyS*
,那么发送AT\Bn
应该可以解决问题。n
可以是 0 到 9 之间的数字,每个值代表 100 毫秒。
因此,发送AT\B4
时应间隔 500 毫秒。
我还没有测试过这个 - 谁还在使用调制解调器?(实际上,百思买仍然销售 56.7k 调制解调器...)