我通过串行< - > USB适配器(Prolific PL2303)将串行GPS连接到嵌入式PC。每5分钟,一个shell脚本运行一个Python脚本,通过Pyserial读取GPS数据,然后将它们上传到Internet。如果我将GPS直接插入PC(通过PL2303)一切正常,我的系统永远运行但是如果我在pl2303和PC之间使用usb HUB我遇到了这个问题:Python脚本可以运行大约3-6小时然后它进入D状态(不间断睡眠)并且shell脚本不能再次运行它(我只能关闭系统,不能杀死)。我检查了我的脚本,并使用了来自不同供应商的usb集线器(有电源而不是),结果相同。
PS我的嵌入式电脑(来自Embeddedarm)运行更新的Debian Lenny。
我能解决它吗?
答案 0 :(得分:1)
处于D状态的进程意味着内核(很可能是设备驱动程序)使您的进程陷入不间断的睡眠状态。
老实说,除非您打算调试内核USB堆栈和/或特定的USB芯片组设备驱动程序,否则您作为用户可能无法做到这一点。
以下是做什么 -
确保嵌入式设备的内核配置具有magic sysreq密钥的内核配置选项,并且启用了它的运行时配置。请参阅:http://en.wikipedia.org/wiki/Magic_SysRq_key了解如何执行此操作。
重新创建问题(让进程陷入D状态)。
用ps找出卡住的python脚本的PID并运行strace -p PID。这将为您提供进程正在进入的特定系统调用。
发送magic sysreq key命令't',它将所有任务及其内核堆栈列出到控制台。通过PID查找python脚本的具体任务,看看内核代码的确切部分是什么。
打开内核代码并尝试调试问题(如果可以),或者将其移植到相关的邮件列表中。
还有一个建议是尝试查看问题是否会在Debian发布的更新的内核版本中消失。如果是这样,您知道这是在较新版本的内核中修复的错误,您可以选择使用较新版本并尝试将修复程序移植到您使用的旧版本。
祝你好运!你需要它......答案 1 :(得分:0)