我已经在 stack Overflow 上发布了这个问题,但是在查找了类似的问题之后,我意识到这是一个更好的地方(并且在周日 10 小时后只获得了 8 次浏览)。如果有必要,我会删除这个或另一个。
我遇到了一个奇怪的问题,而且我似乎找不到其他人遇到类似的问题。我正在使用 screen (sudo screen /dev/ttyUSB0 115200) 通过 USB 连接到类似于 Zedboard 或 Raspberry Pi 的设备。
连接后的某个随机时间点,屏幕将变得无响应。通常关闭设备也会终止屏幕会话,但当屏幕变得无响应时,关闭设备不会执行任何操作。摆脱冻结屏幕的唯一方法是强制关闭终端。
当尝试在新终端中重新连接到设备时,屏幕保持冻结状态,需要再次强制关闭。这些屏幕通过 screen --list 是不可见的,但是通过搜索 screen 进程 (ps ax | grep ttyUSB0),可以找到该屏幕,并且如果尝试重新连接,则可以找到多个屏幕。如果有多个,则可以轻松杀死其他进程(sudo Kill 1234),但是当杀死第一个屏幕进程时,进程类型从 Ss 变为 Ds,我读过这意味着杀死不起作用,用户只需要等待。不幸的是它永远不会关闭。
此时,当尝试使用相同命令重新连接到设备时,屏幕顶部会快速连续打印以下错误:“Cannot open line '/dev/ttyUSB0' for R/W: open() Blocked ,流产了。” (大约 0.5 秒)然后是“抱歉,找不到 PTY。”。然后屏幕自动关闭。此时,我尝试手动删除 /dev 中的 ttyUSB0 条目并使用 mknod 重新创建它,但这没有帮助。此时我所能做的就是硬重置计算机。
我尝试过使用 minicom,但问题仍然存在(使用一定量后会冻结)。一旦死机,如果不重置计算机就无法重新连接。我也在计算机上尝试过不同的 USB 端口。
我目前使用的是 CentOS 6.5,目前无法切换操作系统,所以我希望这不是问题。我尝试通过虚拟机(VirtualBox Ubuntu14.04.2)连接到设备,实际上在相当多的使用量下没有崩溃,但我认为这可能只是偶然,因为这应该不会产生影响。
理想情况下,我想弄清楚如何解决问题,但我也可以只弄清楚如何解决问题,而无需关闭和打开计算机。
答案1
我找到了一个临时解决方案,这可能是唯一可能的解决方案。它可能会揭示实际原因,所以我几天内不会接受我自己的答案,但在那之后我会的。
通过虚拟机连接到设备,虽然崩溃同样频繁,但可以通过禁用并重新启用主操作系统和虚拟机之间的链接(在本例中通过单击 USB 连接)来强制关闭连接按钮并禁用/重新启用 UART 设备)。该解决方案意味着,每当发生崩溃时,只需断开连接、重新连接,然后在控制台中“向上箭头,输入”即可解决问题,并且只需几秒钟。这绝对是一种创可贴解决方案,但我不确定是否存在更好的解决方案。