linux-kernel - 内核卡住 : How to debug it?

标签 linux-kernel kernel freeze

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

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

谢谢,
伊娃。

最佳答案

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

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

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

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

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

相关:kernel trap (at web archive) .此链接可能不再可用,但对于此答案并不重要。

关于linux-kernel - 内核卡住 : How to debug it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16255334/

相关文章:

linux-kernel - 是否可以从 Linux (ioctl) 的内核空间调用用户空间回调函数?

linux-kernel - Linux 内核版本号中的 + 意味着什么?

linux模块编译丢失的文件夹asm

macos - sleep 和唤醒过程对 OSx 上的内核扩展有什么影响

当用户在“系统设置”->“显示和亮度”上启用 "Bold Text"时,iOS 应用程序会在启动屏幕上卡住

cocoa - 运行 NSRunLoop 导致主线程挂起

javascript - 按下按钮后 HTML 页面卡住

我可以通过线程进入应用程序来测量 Linux 中的 CPU 使用率吗

ubuntu - linux header 占用了 EC2 机器上的大量磁盘空间。使用 rm 命令手动删除标题是否安全?

assembly - 如何在8086汇编中更改或设置背景颜色?