在 中Linux
,是否可以使用当地的串行端口?与此类似的东西:
ssh user@localhost
我尝试了这个Raspbian
,但它不起作用(它应该放在我的外壳中,但它没有):
microcom -d /dev/ttyAMA0
我也尝试过/dev/ttyS0
但没有成功。
我当然可以Raspberry Pi
通过串行控制台访问其他机器。
这个问题没有具体的用例 - 我只是无法理解串行的真正工作原理。如果可以连接到本地主机,那么ssh
不应该也可以使用串行端口吗?
答案1
我相信您指的是一种双向 2 线通信协议,通常由微控制器用来相互通信 - 通常用于在两个设备之间传输文本。这是大多数人所说的意思serial
,但是有很多不同的串行协议。
/dev/ttyAMA0
是树莓派上的UART串口设备。该设备文件控制树莓派接头上的 rx (10) 和 tx (8) 引脚。任何程序都可以打开串行端口并向其读/写数据,但是如果没有附加任何内容,所有发送的数据都会丢失,并且不会发送回数据。
大多数树莓派 Linux 发行版都有一个 getty 监听器/dev/ttyACM0
,这是一个为您提供登录提示和 shell 的程序。当您启动时,minicom
getty/dev/ttyAMA0
在 tx 引脚上发送数据,并在 rx 引脚上接收数据 - 如果您有任何附加的东西,这将混淆附加到它们的任何内容。
为了使串行设备做任何有用的事情,它需要与之通信。您可以通过获取其中之一来使其与您的电脑进行通信USB 转 UART 适配器并将 rx 连接到 tx 引脚,将 tx 连接到 rx 引脚,将 gnd 引脚连接到 gnd,然后将其插入电脑。一旦插入,您将在您的电脑上获得一个串行设备(/dev/ttyUSB0
在大多数 Linux 发行版上),并且您发送的任何数据将显示在/dev/ttyAMA0
pi 上,并且 pi 发送的任何数据/dev/ttyAMA0
将显示在您的电脑上。
假设你的 pi 已经有 getty 监听,你所需要做的就是minicom
在你的电脑上启动或类似的程序,你应该会得到一个登录提示(可能需要按几次 Enter 键)。您当然可以停止 getty 并运行另一个可以与串行线通信的程序。
答案2
当您打开与本地主机的 SSH 连接时,您将创建一个具有两个端点的连接。其中一种是服务器,一种是客户端。当一个发送时,另一个接收,反之亦然。使用 SSH,连接将通过 TCP 进行,其中端点通过其 IP 地址和 TCP 端口进行标识。网络连接很简单,因为它们主要是在软件中实现的,因此基本上只需决定一个数字就可以打开新的 TCP 端口。串行端口的情况并非如此,串行端口是一个硬件。
为了通过串行端口获得有用的双向通信,您再次需要有两个端点:两个串行端口。将一个连接到另一个,您可以在其中一个上运行服务器(例如),并在另一个上运行getty
客户端(例如)。minicom
它们是在同一台机器上还是在两台单独的机器上并不重要,但由于它是硬件,因此您必须连接一些实际的电线。
通常,您会在两个设备之间拉动电缆,因为在一台计算机内有更快的数据移动方式。但是没有什么可以阻止您在一台机器上的两个串行端口之间建立串行连接。
如果只有一个串行端口,您能做的最好的事情就是将发送线连接到接收线,但在这种情况下,使用该端口的程序会将其自己的输出视为该端口的输入。这对于通信来说不是很有用,但对于测试可能很有用。