Pak*_*Pak 9 terminal bash serial-port gnu-screen macos
通过阅读“构建无线传感器网络”一书,我了解到您可以使用 Screen 实用程序连接到串行控制台。我尝试使用它连接到 XBee 模块,它似乎工作正常,只是它没有在终端中回显本地键入的字符。到目前为止,我发现的唯一似乎有帮助的方法是使用 stty 实用程序在 tty 设备上设置“echo”选项,但更改似乎没有生效。我在 tty 设备上运行 stty 并通过它“echo”。如果我再次运行 stty 以打印出当前选项,它仍然显示“-echo”已设置。如果我对语法的理解是正确的,破折号表示该选项已关闭,没有破折号表示它已打开。我也试过用 sudo 设置 echo 选项,但那没有
我显然在这方面不是很了解,所以任何帮助将不胜感激。
小智 9
我在尝试以 115200 波特连接到串行设备时遇到了完全相同的问题。我正在运行 RHEL V5。
uname -a
Run Code Online (Sandbox Code Playgroud)
给出:
Linux localhost.localdomain 2.6.32-100.0.19.el5
#1 SMP Fri Sep 17 17:51:41 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
经过一番挖掘,我发现了这个:
sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
Run Code Online (Sandbox Code Playgroud)
或这个:
sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,inlcr,onlret,echo
Run Code Online (Sandbox Code Playgroud)
但是,正如您所指出的,当执行 screen 命令时,所选串行端口(在本例中为 /dev/ttyS0)的 echo 属性将恢复为
-echo
Run Code Online (Sandbox Code Playgroud)
这可以通过命令验证
sudo stty -F /dev/ttyS0 -a
Run Code Online (Sandbox Code Playgroud)
在单独的终端窗口中。
此外,我发现从屏幕会话中分离使用
ctrl-A d
Run Code Online (Sandbox Code Playgroud)
是个坏主意,因为您无法重新连接。我们来看一个典型的调用:
[iceman@localhost ~]$ sudo stty -F /dev/ttyS0 echo
[iceman@localhost ~]$ sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
[detached]
[iceman@localhost ~]$ ps aux | grep SCREEN
root 3779 0.0 0.1 78476 2876 ? Ss 11:05 0:00 SCREEN /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
iceman 3781 0.0 0.0 61152 740 pts/6 S+ 11:05 0:00 grep SCREEN
[iceman@localhost ~]$ screen -ls
No Sockets found in /var/run/screen/S-iceman.
[iceman@localhost ~]$
Run Code Online (Sandbox Code Playgroud)
所以我们分离的 screen 会话仍在运行,但 screen -ls 显示 NADA。当附加到 /dev/ttyS0 的 screen 会话仍在运行时,让我们看一下 echo 的状态(上面设置为 active)。如果我们现在检查 /dev/ttyS0 的状态,我们会看到 echo 已关闭:
[iceman@localhost ~]$ sudo stty -F /dev/ttyS0 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts -cdtrdsr
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
[iceman@localhost ~]$
Run Code Online (Sandbox Code Playgroud)
最后,尝试其他替代方法来重新附加:
[iceman@localhost ~]$ screen -x
There is no screen to be attached.
[iceman@localhost ~]$ screen -r
There is no screen to be resumed.
[iceman@localhost ~]$
Run Code Online (Sandbox Code Playgroud)
这可能是浪费大量时间的根源,因为搜索小写“屏幕”的进程将一无所获!
重要提示:如果在同一个串行端口上有多个屏幕会话,则尝试确定正在发生的事情将产生随机结果,具体取决于哪个进程“捕获”了串行端口中断。
正如您所说的 Pak,无论出于何种原因,屏幕中的 echo 选项都不会传递给 stty,事实上,无论您使用 -echo 还是 echo,当使用 /dev/ 屏幕调用时,stty 都会设置为 -echo ttyS0 作为指定的串口。(我已经证实了这一点)
我通过使用 minicom 找到了一个解决方案,如下所示:
sudo minicom -s
Run Code Online (Sandbox Code Playgroud)
然后在串口菜单下设置串口如下:
A - Serial Device : /dev/ttyS0
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
Run Code Online (Sandbox Code Playgroud)
然后另存为“ser1”并使用命令:
sudo minicom ser1
Run Code Online (Sandbox Code Playgroud)
这将启动 minicom,然后您可以使用它:
ctrl-A E
Run Code Online (Sandbox Code Playgroud)
打开本地回声和
ctrl-A A
Run Code Online (Sandbox Code Playgroud)
将换行符附加到 CR 终止的 ascii 到达串行端口。
Minicom 报告其版本为:
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jun 6 2007, 06:02:15.
Run Code Online (Sandbox Code Playgroud)
我希望这会有所帮助,并至少为其他人节省一些时间和精力。谁能想到在 Linux 中安装 HyperTerm 会如此痛苦?
| 归档时间: |
|
| 查看次数: |
14205 次 |
| 最近记录: |