让插座猫成为你的串口粘合剂

2020-05-17 08:14:43

我之前写过如何配置Minicom以通过串行UART连接到设备。在那篇帖子中,我提到Minicom可能不是这项工作的最佳工具。考虑到Minicom正在增加许多不必要的复杂性。如果您想一想,我们使用的是一个用于与调制解调器通信的命令行实用程序,去掉了所有这些功能,这样我们就只剩下一个知道如何连接到外来TTY的终端仿真器了。然而,我们可能是在一个功能完善的终端仿真器(如xterm)上运行Minicom。我们所需要的只是一种在RAW模式下将终端仿真器连接到目标串行端口的方法。只要设备端在接收端运行登录,我们就可以简单地让我们的终端仿真器执行其设计目的。

使用Socket CAT(参见Socket(1)),我们可以在RAW模式下将串行端口连接到终端仿真器。

Socket Cat在给定地址规范的情况下中继两个双向字节流。地址规范的顺序无关紧要。以下命令等效:

开头的连字符实际上是地址类型stdio的别名。某些地址类型采用由:分隔的参数。后面的逗号分隔列表是地址选项。地址选项在选项组中定义。STDIO接受来自FD、TERMIOS、REG、Socket选项组的选项。RAWER地址选项在TERMIOS选项组中定义。它在RAW模式下初始化线路规程,并隐式关闭回显。

有一条规则是,如果在地址规范的第一个冒号或逗号之前找到正斜杠,则地址类型隐式默认为GOPEN(通用文件打开),并接受(FD、REG、SOCKET、NAMED和OPEN)选项组。换句话说,/dev/ttyUSB0是Gopen的地址参数。之后,地址选项列表开始。第一个地址选项b115200/将波特率设置为115200。我们已经熟悉的第二个地址选项会导致/dev/ttyUSB0/在RAW模式下初始化,并隐式关闭ECHO。

您可能想知道为什么RAWER是有效的选项,因为它是在TERMIOS选项组中定义的,而TERMIOS没有被列为GOPEN可用的选项组之一。事实上,波特率选项也来自TERMIOS。套接字CAT通过使TERMIOS选项组可用来为在TTY上工作的地址提供例外。

如果您希望避免别名和隐式地址类型,则以下命令等效。

在某些情况下,您可能希望保留套接字CAT中继串行连接。您可以尝试^C,这是中断前台作业的默认方式。但是,该字节不会被客户端的终端仿真解释,而是通过中断设备端的前台进程来传递。有许多方法可以实现所需的行为。套接字CAT手册页(请参见Socat(1))建议使用应用程序选项组中的转义地址选项。ESCAPE选项接受标识某个键的keysym十六进制代码,当按下该键时,将向输入流发送EOF,从而结束中继。

由0x0f标识的密钥是C-O。要获得loadkey(1)已知的键符的完整列表,请运行dumpkey-l。如果您曾经忘记包括退出选项,那么您仍然可以通过给定PID(进程ID)通过KILL(1)发送SIGINT(参见信号(7))来从另一个终端中断套接字。您可以使用pidof(1)获得PID。

在一个终端上运行Socat的情况下,打开第二个终端并运行以下命令,向SIGINT发送Socat信号。

我想确认一下,使用Socat作为串行字节流和Stdio字节流之间的粘合剂,实际上将允许我运行ncurses应用程序,而不会损坏显示。为了测试这一点,我将我的PinePhone连接到/dev/ttyUSB0,打开一个xterm会话,然后运行前面提到的socket命令。

由于我的PinePhone在连接时已经启动,所以没有登录提示符等待问候我。我只需在空白处键入我的用户名,然后点击<;ret>;。此时,密码提示显示为由套接字CAT接收的字节,并通过我的xterm会话的标准输出进行中继。在我成功登录到我的shell帐户之后,我运行了nmtui,它显示在我的屏幕上,没有任何不需要的东西。

我的PinePhone运行的是postmarket OS,登录shell为ash。我将PinePhone的串行端口配置为使用Linux终端,以便可以运行彩色显示器。

我使用Minicom通过串行连接我的PinePhone的动机是因为我无论如何都要用它来配置PinePhone的调制解调器。我想使用这一个工具连接到PinePhone并配置调制解调器会很方便。但是,Socket cat使得通过串行UART进行连接变得非常容易,除非您有很好的理由使用其他东西,否则我认为您应该考虑让Socket CAT成为您的默认粘合剂。

接下来,我将发布关于使用等离子移动设备设置售后市场操作系统以及为我的SIM卡手动配置Ofono的信息。