Linux kernel 内核冻结:如何调试它?

Linux kernel 内核冻结:如何调试它?,linux-kernel,kernel,freeze,Linux Kernel,Kernel,Freeze,我有一个嵌入式电路板,它的内核模块有数千行,这些行冻结在随机和复杂的随机时间用例中。我尝试调试它的解决方案是什么 我已经尝试魔术系统的要求,但它不工作。我猜原因是我在一个循环中,或者在一个硬件中断被禁用的代码中处于死锁 谢谢, Eva。通常,嵌入式电路板具有。您应该启用此计时器,并使用用户进程启动看门狗硬件。在看门狗进程上使用nice,以便更高优先级的任务必须放弃CPU。这为问题提供了线索。如果设备未在监视器处于活动状态时复位,则可能只有网络或串行端口停止了通信。即,内核尚未锁定。问题是没有用户

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

我已经尝试魔术系统的要求,但它不工作。我猜原因是我在一个循环中,或者在一个硬件中断被禁用的代码中处于死锁

谢谢,
Eva。

通常,嵌入式电路板具有。您应该启用此计时器,并使用用户进程启动看门狗硬件。在看门狗进程上使用nice,以便更高优先级的任务必须放弃CPU。这为问题提供了线索。如果设备未在监视器处于活动状态时复位,则可能只有网络或串行端口停止了通信。即,内核尚未锁定。问题是没有用户可见的活动。如果/当现场发生此类问题时,看门狗也很有用

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

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

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

您还可以设置panic=-1和reboot=。。。在内核命令行上。如果您只有代码问题,那么这些工具是有用的


相关:。此链接可能不再可用,但对此答案不重要。

您好,谢谢您的回答。我知道我的板处理硬件看门狗功能。我将尝试确认这是一个锁定案件。我还尝试通过在内核参数中添加SLUB_debug=FZPU来使用SLUB/SLAB调试。然后,当我运行slabinfo-v来验证我的所有slab时,没有输出。所以我猜slab调试并没有检测到kobject内存中的错误。我还尝试在内核中启用configure:CONFIG\u DETECT\u SOFTLOCKUP。但是没有变化,我总是冷得发抖。所以这次让我们试试看门狗。。。