Linux kernel 调试内核挂起

Linux kernel 调试内核挂起,linux-kernel,embedded-linux,Linux Kernel,Embedded Linux,我正在尝试运行一个使用内核模式驱动程序的应用程序。系统每小时锁定一次,恢复它的唯一方法是硬重置。Sysrq停止响应,telnet会话挂起,并且没有任何类型的错误消息。不幸的是,该板没有ejtag支持。我一直试图从功能上隔离它,但这就像在干草堆中寻找一根针。有什么建议吗 PS:这是一个mips linux系统(2.6.31) 不幸的是,如果没有sysreq操作,或者没有某种方式戳底层系统,那么您就没有运气了 如果您可以从系统中获得一些行为(可能是硬件看门狗?),我建议使用kdump 此外,如果这是

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


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

不幸的是,如果没有sysreq操作,或者没有某种方式戳底层系统,那么您就没有运气了

如果您可以从系统中获得一些行为(可能是硬件看门狗?),我建议使用kdump


此外,如果这是最近出现的问题,首先将驾驶员的代码平分,以确定碰撞发生的位置

不幸的是,如果没有sysreq操作,或者没有某种方式戳底层系统,那么您就没有运气了

如果您可以从系统中获得一些行为(可能是硬件看门狗?),我建议使用kdump


此外,如果这是最近出现的问题,首先将驾驶员的代码平分,以确定碰撞发生的位置

根据您的具体情况,这里有一些选项。如果您能提供更多关于内核模式驱动程序的平台和性质的详细信息,这将非常有用

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

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

在Linux内核黑客攻击菜单中启用软锁定检测,以及任何其他相关的内核黑客攻击功能。Linux可能需要一两分钟才能检测并报告软锁定。你等得够久了吗

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


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

根据您的具体情况,这里有一些选项。如果您能提供更多关于内核模式驱动程序的平台和性质的详细信息,这将非常有用

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

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

在Linux内核黑客攻击菜单中启用软锁定检测,以及任何其他相关的内核黑客攻击功能。Linux可能需要一两分钟才能检测并报告软锁定。你等得够久了吗

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


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

如果内核没有完全挂起,并且仍然受到中断,那么您可能可以使用KGDB


如果您不能做到这一点,您可以向驱动程序添加更多日志代码来跟踪问题的根源。我将在每个函数的入口上至少放置一个printk(),并且可能在每个函数的每个出口上也放置一个printk()。这至少可以帮助您找出问题发生的地方。

如果内核没有完全挂起,并且您仍然受到中断,那么您可能可以使用KGDB


如果您不能做到这一点,您可以向驱动程序添加更多日志代码来跟踪问题的根源。我将在每个函数的入口上至少放置一个printk(),并且可能在每个函数的每个出口上也放置一个printk()。这至少可以帮助您找出问题所在。

我很好奇——问题出在哪里?它卡在了一个常用的自旋锁中。开始改用自旋锁定irq。我们通过将消息写入临时内存位置来发现问题。我很好奇——问题出在哪里?它卡在了一个常用的自旋锁中。开始改用自旋锁定irq。我们通过将消息写入临时内存位置来发现问题。