11

我有一个带有数千行内核模块的嵌入式板,它在随机时间冻结随机和复杂的用例。我尝试调试它的解决方案是什么?

我已经尝试过魔法系统请求,但它不起作用。我想解释是我在禁用硬件中断的代码中处于循环或死锁状态?

谢谢,伊娃。

4

1 回答 1

10

通常,嵌入式板有一个看门狗。您应该启用此计时器并使用watchdog用户进程来启动看门狗硬件。nice在进程上使用,watchdog以便更高优先级的任务必须放弃 CPU。这为问题提供了线索。如果设备没有在看门狗活动的情况下重置,那么可能只有网络串行端口停止了通信。即,内核没有锁定。问题是没有用户可见的活动。如果/当这种类型的问题在现场发生时,看门狗也很有用。

对于内核锁定情况,锁定看门狗内核功能可能有用。如果您有推测的无限循环/死锁,这将起作用。但是,如果这是定制硬件,则SDRAM外围设备也有可能锁定并导致异常的总线活动。这将阻止 CPU 获取正确的代码;显然,Linux很难从中恢复过来。

您可以将看门狗与一些用作跟踪缓冲区的闲置内存结合起来。并且可以限制内核使用的内存。可以编写使用此内存的驱动程序/设备,以保存重新启动后的跟踪点。当内核启动时检测到看门狗重置时,将转储闲置内存的环形缓冲区。memmap=mem=

如果问题是可重复的,或者发现如何使事件可重复,注册可以执行上下文切换的线程通知器也很有用。printk一旦确定了导致锁定的一系列事件,您就可以使用示波器逻辑分析仪进行一些最终诊断。或者,此时可能很明显哪个外围设备是问题所在。

你也可以在内核命令行上设置panic=-1和。如果您只有代码问题,kdump 工具很有reboot=...

相关:内核陷阱(在网络存档中)。此链接可能不再可用,但对于此答案并不重要。

于 2013-04-28T16:26:09.507 回答