2

我正在尝试运行一个使用内核模式驱动程序的应用程序。系统每小时锁定一次,恢复它的唯一方法是硬重置。Sysrq 停止响应,telnet 会话挂起并且没有任何类型的错误消息。不幸的是,该板没有 ejtag 支持。我一直试图在功能上隔离它,但这就像在干草堆中寻找针一样。有什么建议么?

PS:这是一个mips linux系统(2.6.31)。

4

3 回答 3

4

以下是一些选项,具体取决于您的具体情况。如果您可以提供有关内核模式驱动程序的平台和性质的更多详细信息,那将会很有帮助。

假设您有理由对硬件充满信心,您可能的锁定来源是内核中的锁定问题、未初始化的变量以及禁用抢占的无限循环。

您可以配置定时器中断以定期运行并闪烁 LED 吗?您可能会发现查看在锁定期间是否继续处理中断很有用。

在 Linux 内核黑客菜单中启用软锁定检测,以及任何其他相关的内核黑客功能。Linux 可能需要一两分钟来检测并报告软锁定。你等了足够长的时间来检查这个吗?

在内核黑客攻击中启用锁定依赖检查,并修复驱动程序中报告的任何锁定错误。

尝试更改内核抢占模式。这会改变某些系统锁的行为,在某些情况下会将死锁变成危害较小的锁。如果相关/可能,请禁用 SMP。

于 2010-06-17T08:47:52.673 回答
1

不幸的是,如果没有运行 sysreq 或某种方式来戳底层系统,那么您就不走运了。

如果您可以从系统中获得一些行为(可能是硬件看门狗?),我会推荐 kdump。

此外,如果这是一个较新的问题,首先将驱动程序的代码一分为二,以确定崩溃发生的位置。

于 2010-05-07T22:05:12.070 回答
0

如果内核没有完全挂起并且您仍然收到中断,您也许可以使用 KGDB。

如果你不能这样做,你可以在你的驱动程序中添加更多的日志代码来追踪问题的根源。我至少会在每个函数的入口处放置一个 printk() ,并且可能在每个函数的每个出口处也放置一个。这至少应该可以帮助您找出问题所在。

于 2010-06-17T16:19:44.097 回答