我正在尝试运行使用内核模式驱动程序的应用程序。系统每小时锁定一次,恢复它的唯一方法是硬重置。 Sysrq停止响应,telnet会话挂起,没有任何类型的错误消息。不幸的是,董事会没有ejtag支持。我一直试图在功能上隔离它,但这就像在干草堆中寻找一根针。有什么建议吗?
PS:这是一个mips linux系统(2.6.31)。
答案 0 :(得分:3)
以下是一些选项,具体取决于具体情况。如果您可以提供有关平台和内核模式驱动程序性质的更多详细信息,那将会很有帮助。
假设您有理由对硬件充满信心,您可能的锁定源是锁定内核中的问题,未初始化的变量以及禁用抢占的无限循环。
您是否可以配置定时器中断以定期运行并使LED闪烁?您可能会发现在锁定期间查看是否继续处理中断很有用。
在Linux内核黑客菜单中启用软锁定检测,以及任何其他相关内核黑客攻击功能。 Linux可能需要一两分钟检测并报告软锁定。你有足够的时间等待检查吗?
在内核黑客中启用锁定相关性检查,并修复驱动程序中任何报告的锁定错误。
尝试更改内核抢占模式。这会更改某些系统锁的行为,在某些情况下会将死锁转换为危害较小的锁。如果相关/可能,请禁用SMP。
答案 1 :(得分:1)
不幸的是,如果没有sysreq操作,或者某种方式戳到底层系统,你就不走运了。
如果您可以从系统中获得某些行为(可能是硬件看门狗?),我会推荐kdump。
此外,如果这是一个更新的问题,请先将驱动程序的代码二等分,以确定崩溃发生的位置。
答案 2 :(得分:0)
如果内核没有完全挂起并且你仍然在中断,你可以使用KGDB。
如果您不能这样做,您可以向驱动程序添加更多日志记录代码以跟踪问题的根源。我会在每个函数的条目上至少放置一个printk(),也可能在每个函数的每个出口处放置一个。这应该至少可以帮助您找出问题发生的位置。