如何重置 /dev/ttyS0

如何重置 /dev/ttyS0

我正在尝试使用串行接口(运行 Scientific Linux 6.1)连接到 Khepera 机器人,我使用命令screen /dev/ttyS0进行通信,工作正常,但后来我想关闭它并使用 MATLAB,但我发现没有办法关闭该会话,所以我只是在终端窗口运行屏幕上单击 X。

现在我的 ttyS0 端口无法打开。MATLAB 和 screen 都说无法打开该端口。

我如何重置 ttyS0 端口?我的意思是,一个选择是重启电脑。但是如何在不重启电脑的情况下做到这一点?

终止串行通信的正确方法是什么?

另外,以下命令有什么作用?我用 Google 找到了它并运行了它,但什么也没发生。它做了什么坏事吗?我需要修复吗?

/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100

答案1

您可以发出命令screen -ls来获取所有当前屏幕会话的状态。然后使用选项screen -r“重新连接”断开的 screen会话,并-X使用选项终止会话。

以下是一个示例 shell 会话。我使用选项以“分离”模式(在后台)-d -m启动 会话,以模拟使用 关闭会话。from 的输出是进程 ID 号,它将用于“重新连接”到该特定会话。screenX on the terminal window running screen5207screen-lsscreen

$ screen -d -m /dev/ttyS0
$ screen -ls
There is a screen on:
    5207..host  (10/04/2011 10:16:50 AM)    (Detached)
1 Socket in /var/run/screen/S-user.

$ screen -r 5207 -X kill
$ screen -ls 
No Sockets found in /var/run/screen/S-user.

$ 

答案2

终止串行通信的正确方法是什么?

从编程的角度来看——只需close()打开文件描述符即可。退出程序会自动执行此操作。但是,你确实不是退出屏幕。

GNU Screen 最常用的功能之一是分离并重新连接到会话。关闭窗口时,Screen 的“服务器”部分仍在运行,您可以使用 重新连接到它screen -r

使用C-a,k来真正地关闭 Screen 窗口。

另外,以下命令有什么作用?我用 Google 找到了它并运行了它,但什么也没发生。它做了什么坏事吗?我需要修复吗?

/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100

agetty是一个 TTY 监视程序。它的工作是重新初始化终端设备的配置并显示登录提示;您可以通过切换到控制台登录提示来查看它的运行情况tty1... tty6. 1

在这种情况下,当您启动时,它会向机器人agetty发送登录提示2login: ,机器人可能会将其视为垃圾丢弃。这通常是无害的,除非机器人以某种方式将“ ”解释为“启动世界接管”。所做的配置agetty也不应该破坏任何东西。


1请注意,getty 不处理实际登录 - 它只要求输入用户名。输入后,agetty开始/sbin/login执行登录过程。

2它还会发送/etc/issueserial文本文件的内容,但由于您在 Google 上找到了该命令,所以很可能您甚至没有该文件。

相关内容