无法通过命令行从串行端口读取

无法通过命令行从串行端口读取

我尝试以 root 身份使用 cat 从 1 个终端上的 /dev/ttyS0 读取:

cat < /dev/ttyS0

并以 root 身份从另一个终端使用 echo 向串行端口发送消息:

echo -ne "hello" > /dev/ttyS0

但是我没有从猫那里得到任何信息。有人能告诉我问题的原因吗?

答案1

该设备/dev/ttyS0通常对应于计算机的第一个串行端口。如今,计算机没有串行端口,但某些 USB 设备可能会出现在/dev/ttySX系统端口。如果设备在启动期间连接到计算机,则可以通过运行以下命令找到设备名称:

journalctl -b | grep ttyS

如果设备尚未连接,首先运行命令:

journalctl -f | grep ttyS

然后连接设备;您应该会看到一条指示端口号的消息X


如果您尝试将数据发送到桌面系统的虚拟控制台,请先按下组合键Ctrl+ Alt+F4并登录到以文本模式显示的虚拟控制台。然后运行命令

who am i

验证您登录的设备是否确实存在/dev/tty4(在这种情况下,上述命令输出的第二个字应该是tty4)。

在主图形屏幕(可通过按组合键Ctrl+ Alt+进入F2)打开终端并运行以下命令:

echo "Hello" >/dev/tty4

使用Ctrl++切换回控制台并查看显示的消息。AltF4

类似地,在主图形屏幕上运行以下命令:

cat </dev/tty4

切换回控制台并尝试输入一些字符。有些字符会回显到屏幕上(通过bash),有些则不会。未回显的字符将作为命令的输出显示在主图形屏幕上cat。原因是同一设备被两个进程读取(一个在文本控制台上,bash另一个在图形屏幕上,即cat命令)。


笔记:

非 root 用户要想读写串行端口,需要拥有该设备的读写权限。在 Ubuntu 中,只需dialout使用以下命令将当前用户添加到组中即可轻松完成此操作

sudo addgroup _your_user_ dialout

您可能需要注销然后重新登录才能使此更改生效。

相关内容