我将有两个串行 USB 设备相互连接,/dev/ttyUSB1
并且/dev/ttyUSB2
. 我想/bin/bash
连接到一端运行,以便我可以使用 picocom 连接到另一端并将picocom
picocom 用作本地终端模拟器。
我尝试过这样的事情
setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1
然后用picocom连接到另一端,但我只是得到一个充满乱码的屏幕(:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$
)..(波特率匹配,并且两个终端可以与两端的两个picocom通信)
然而,我真的不知道自己在做什么。谁能告诉我这个秘密吗?
更正/更新:
在另一台计算机上,我不再收到以前收到的乱码。当我如上所述将 bash 连接到一个 tty 并使用 picocom 连接到另一端时,我现在收到提示,并且我可以运行命令,但我的命令不会回显给我(我只看到结果),而且我没有“作业控制”(我用 Ctrl+C 进行测试,这不会停止睡眠过程)
背景:
我已经通过另外两种方式成功使用 picocom 作为本地终端模拟器:
与盖蒂:
sudo systemctl start [email protected]
允许我成功连接到
/dev/ttyUSB1
picocom,但我必须登录。(感谢此答案https://unix.stackexchange.com/a/772040/158192对上一个问题)与索卡特
$ socat -d -d PTY,raw,echo=0 EXEC:"/bin/bash",pty,stderr,setsid,sane 2024/04/01 18:32:13 socat[40547] N PTY is /dev/pts/4 ...
这允许我像这样使用 picocom 作为本地终端
picocom /dev/pts/4
所以是的,我应该能够自己将 /bin/bash 连接到 USB tty,对吧?但我的试验都有错误。
您的第一个示例看起来是正确的(但也请参阅底部的我的注释)。
我的桌子上有一台机器,我通过串行端口连接到它。在目标机器上,串口是
/dev/ttyS0
。在我的桌面上,端口是/dev/ttyUSB0
.如果我使用如下通信工具从主机连接
picocom
:然后停止
getty
通常在串口上运行的程序并运行:一切都按预期进行。在 中
picocom
,我看到:您确定两种情况下的波特率都匹配吗?
stty
您可以使用以下命令显式设置波特率:如果您的目标是自动启动不需要登录的 bash shell,另请参阅这篇文章(免责声明:我写的),其中描述了如何配置 getty 和 pam 来提供准确的服务。