【发布时间】:2012-02-07 02:35:06
【问题描述】:
我正在尝试调试一个设备驱动程序,该驱动程序显然会导致其他 任务挂起。哪个任务或在什么时间它是确定性的 将挂起。
基本上我从内核收到了一些错误消息,说“任务有 被阻止超过 120 秒”,以及一些堆栈跟踪。 挂起的任务从 sendmail 到 mkfs 再到 pdflush(一个内核线程)。 堆栈跟踪中最顶层的函数与“getnstimeofday”不同 到“bio_submit”到“mark_locks_held”。
我很难调试它,因为很难找到 问题。内核提供的堆栈跟踪不是很有帮助 两者都不。根据那些堆栈跟踪,其中一些挂起的进程 甚至没有试图抓住锁(比如在 getnstimeofday 函数),我不知道他们为什么挂起。
所以我想知道是否有人对如何调试这样的 问题。 kgdb 在这里有用吗,也许可以给我确切的信息 点进程挂起,它在等待什么样的锁?
欢迎提出任何建议。
【问题讨论】:
-
你的内核编译成使用帧指针了吗?
-
不,不是。它确实有所有的调试选项。