我将有两个串行 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,对吧?但我的试验都有错误。
答案1
您的第一个示例看起来是正确的(但也请参阅底部的我的注释)。
我的桌子上有一台机器,我通过串行端口连接到它。在目标机器上,串口是/dev/ttyS0
。在我的桌面上,端口是/dev/ttyUSB0
.
如果我使用如下通信工具从主机连接picocom
:
$ picocom -b 115200 /dev/ttyUSB0
然后停止getty
通常在串口上运行的程序并运行:
# systemctl stop serial-getty@ttyS0
# setsid bash > /dev/ttyS0 < /dev/ttyS0 2>&1
一切都按预期进行。在 中picocom
,我看到:
root@radio0:/boot/firmware# tty
/dev/ttyS0
你是当然两种情况下的波特率是否匹配?您可以使用stty
以下命令显式设置波特率:
# stty 115200 < /dev/ttyS0
如果您的目标是自动启动不需要登录的 bash shell,另请参阅本文(免责声明:我写的)描述了如何配置 getty 和 pam 来提供准确的服务。
答案2
这里有两个问题:
- 正如已接受的答案所指出的那样,胡言乱语与问题中的任何内容无关,并且不能轻易复制
- 作业控制和 echo 不起作用 - 解决方案重要的是在 bash 连接的一端使用“sane”:(可能在连接 bash 之前)
stty sane -F /dev/ttyUSB2
setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1
这是内置于问题中 pts 版本的 socat 命令中的。