有没有一种方法可以像使用 SSH 一样连接到串行终端?一定有比Minicom等工具更简单的方法,像这样
$ serial /dev/ttyS0
我知道我可以cat
输出,/dev/ttyS0
但只有一种方式可以进行通信,即从端口到控制台。到港口也是echo
一样,但到港口却相反。
如何在 Unix/Linux 上以最简单的方式实现串口的双向通信?
答案1
我找到了screen
最有用的串行通信程序,因为无论如何我都将它用于其他用途。screen /dev/ttyS0 <speed>
尽管您的设备的默认设置可能有所不同,但通常只是。它还允许您通过进入命令模式并执行 来将任何内容通过管道传输到会话中exec !! <run some program that generates output>
。
答案2
背景
您需要的主要原因任何像通过串行端口进行通信的程序minicom
一样,端口需要设置在启动连接之前。如果设置不正确,cat
和echo
命令将不会执行您所期望的操作。请注意,一旦您运行类似 的程序minicom
,端口就会保留所minicom
使用的设置。您可以使用stty
如下程序查询通信设置:
stty < /dev/ttyS0
如果你做对了;启动计算机后和运行任何其他程序(例如minicom,
通信设置)之前,将采用默认设置。这些可能与您建立连接所需的不同。在这种情况下,发送命令cat
或echo
到端口要么会产生垃圾,要么根本不起作用。
stty
再次运行后使用minicom
,您会注意到设置已设置为程序正在使用的设置。
最少的串行通信
基本上,通过串行端口进行双向通信需要做两件事:1)配置串行端口,2)打开伪tty读写。
据我所知,执行此操作的最基本的程序是picocom
。您还可以使用类似的工具setserial
设置端口,然后直接从 shell 与其交互。
答案3
我找到了一种使用 shell 脚本的方法串行编程
它cat
作为后台进程和 while
读取用户输入并将echo
其输出到端口的循环运行。我将其修改为更通用,它完全符合我的目的。
#!/bin/sh
# connect.sh
# Usage:
# $ connect.sh <device> <port speed>
# Example: connect.sh /dev/ttyS0 9600
# Let cat read the device $1 in the background
cat "$1" &
# Capture the PID of the background process (cat)
# so it is possible to terminate it when done.
bgPid=$!
# Set up device
stty -F "$1" "$2"
# Read commands from user, send them to device $1
while read cmd
do
echo "$cmd"
done > "$1"
# Terminate background read process
kill "$bgPid"
答案4
“tio”是一个简单的 TTY 终端应用程序,具有简单的命令行界面,可以轻松连接到 TTY 设备以进行基本输入/输出。
典型用途是没有选项。例如:
tio /dev/ttyS0
对应常用选项:
tio --baudrate 115200 --databits 8 --flow none --stopbits 1 --parity none /dev/ttyS0
它为所有选项提供了完整的 shell 自动完成支持。