首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我通过usb集线器连接串行设备时,Linux进程进入D状态

当我通过usb集线器连接串行设备时,Linux进程进入D状态
EN

Stack Overflow用户
提问于 2011-03-12 16:52:37
回答 2查看 975关注 0票数 0

我有一个串行全球定位系统连接到嵌入式PC通过串行<->USB适配器(多产的PL2303)。每隔5分钟,shell脚本就会运行一个Python脚本,该脚本通过Pyserial读取GPS数据,然后将数据上传到Internet。如果我把我的GPS直接插到电脑上(通过PL2303),一切正常,我的系统永远运行,但如果我在pl2303和电脑之间使用usb集线器,我会遇到这样的问题: Python脚本运行3-6个小时,然后它进入D状态(不中断睡眠),外壳脚本不能再运行它(我只能关闭系统,不可能终止)。我检查了我的脚本,我使用了来自不同供应商的usb集线器(无论是否有电源),结果都是一样的。

PS我的嵌入式pc (来自Embeddedarm)运行的是更新后的Debian Lenny。

我该怎么解决呢?

EN

回答 2

Stack Overflow用户

发布于 2011-03-12 17:18:48

处于D状态的进程意味着内核(很可能是设备驱动程序)已将进程置于不可中断的休眠状态。

老实说,作为用户,您可能对此几乎无能为力,除非您打算调试内核USB堆栈和/或特定的USB芯片组设备驱动程序。

这就是我们要做的-

  1. 确保您的嵌入式设备的内核配置具有神奇sysreq键的内核配置选项,并打开了它的运行时配置。关于如何做到这一点,请参阅:http://en.wikipedia.org/wiki/Magic_SysRq_key
  2. 重新创建问题(使进程陷入D状态)。
  3. 找到带有ps的阻塞python脚本的PID,并在其上运行strace -p PID。这将为您提供进程正在睡眠的特定系统调用。
  4. 向控制台发送神奇的sysreq key命令't',该命令列出所有任务及其内核堆栈。通过PID查找python脚本的特定任务,看看您到底卡住了内核代码的哪一部分。
  5. 如果可以,请打开内核代码并尝试调试问题,如果不能,请将其移植到相关的邮件列表。

另一个建议是尝试在Debian发布的更新的内核版本中看看这个问题是否会消失。如果是这样的话,您知道这是一个在较新版本的内核中修复的错误,您可以选择使用较新的版本,并尝试将修复移植到您所关心的旧版本。

祝好运!你会需要它的。

票数 1
EN

Stack Overflow用户

发布于 2011-03-12 17:32:10

Ubuntu launchpad有一个可疑的bug文件,就像你的一样。建议的解决方法是:

代码语言:javascript
运行
复制
modprobe -r pl2303
modprobe pl2303

看看这能不能绕过bug?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5281579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档