Linux kernel 如何调查运行时Linux内核警告

Linux kernel 如何调查运行时Linux内核警告,linux-kernel,Linux Kernel,我的设备正在运行一个基于Linux内核2.6.32的软件。 出现如下内核警告: WARNING,Aug 27 21:55:09,"------------[ cut here ]------------" WARNING,Aug 27 21:55:09,"WARNING: at net/sched/sch_generic.c:255 dev_watchdog+0x144/0x224()" INFORMATIONAL,Aug 27 21:55:09,"NETDEV WATCHDOG: eth1 (

我的设备正在运行一个基于Linux内核2.6.32的软件。 出现如下内核警告:

WARNING,Aug 27 21:55:09,"------------[ cut here ]------------"
WARNING,Aug 27 21:55:09,"WARNING: at net/sched/sch_generic.c:255 dev_watchdog+0x144/0x224()"
INFORMATIONAL,Aug 27 21:55:09,"NETDEV WATCHDOG: eth1 (cdc_ether): transmit queue 0 timed out"
WARNING,Aug 27 21:55:09,"Modules linked in: GobiSerial GobiNet g_ether leddrv cryptr_micro gpio_event_drv [last unloaded: wlan]"
WARNING,Aug 27 21:55:09,"[<c0a7b518>] (unwind_backtrace+0x0/0xdc) from [<c0a9cfb0>] (warn_slowpath_common+0x48/0x60)"
WARNING,Aug 27 21:55:09,"[<c0a9cfb0>] (warn_slowpath_common+0x48/0x60) from [<c0a9d000>] (warn_slowpath_fmt+0x24/0x30)"
WARNING,Aug 27 21:55:09,"[<c0a9d000>] (warn_slowpath_fmt+0x24/0x30) from [<c0ccae98>] (dev_watchdog+0x144/0x224)"
WARNING,Aug 27 21:55:09,"[<c0ccae98>] (dev_watchdog+0x144/0x224) from [<c0aa56a8>] (run_timer_softirq+0x138/0x1b4)"
WARNING,Aug 27 21:55:09,"[<c0aa56a8>] (run_timer_softirq+0x138/0x1b4) from [<c0aa1a60>] (__do_softirq+0x70/0xf4)"
WARNING,Aug 27 21:55:09,"[<c0aa1a60>] (__do_softirq+0x70/0xf4) from [<c0aa1b24>] (irq_exit+0x40/0x8c)"
WARNING,Aug 27 21:55:09,"[<c0aa1b24>] (irq_exit+0x40/0x8c) from [<c0a75070>] (asm_do_IRQ+0x70/0x8c)"
WARNING,Aug 27 21:55:09,"[<c0a75070>] (asm_do_IRQ+0x70/0x8c) from [<c0a75a70>] (__irq_svc+0x30/0x80)"
WARNING,Aug 27 21:55:09,"Exception stack(0xc0ed7f80 to 0xc0ed7fc8)"
WARNING,Aug 27 21:55:09,"7f80: 00000000 40000013 00712778 00003505 c0ed6000 c0f11f1c c0a6d3f4 c0ed9bd8"
WARNING,Aug 27 21:55:09,"7fa0: 80027104 411fc087 0000001f 00000000 c0edb8e0 c0ed7fc8 c0a85cc4 c0a864a4"
WARNING,Aug 27 21:55:09,"7fc0: 60000013 ffffffff"
WARNING,Aug 27 21:55:09,"[<c0a75a70>] (__irq_svc+0x30/0x80) from [<c0a864a4>] (omap3_pm_idle+0x48/0x4c)"
WARNING,Aug 27 21:55:09,"[<c0a864a4>] (omap3_pm_idle+0x48/0x4c) from [<c0a773e4>] (cpu_idle+0x48/0x88)"
WARNING,Aug 27 21:55:09,"[<c0a773e4>] (cpu_idle+0x48/0x88) from [<c0008a68>] (start_kernel+0x234/0x28c)"
WARNING,Aug 27 21:55:09,"[<c0008a68>] (start_kernel+0x234/0x28c) from [<80008034>] (0x80008034)"
WARNING,Aug 27 21:55:09,"---[ end trace 7fe9ba4a7fb84cb4 ]---"
警告,8月27日21:55:09,“-------------[切到这里]------------”
警告,8月27日21:55:09,“警告:at net/sched/schu generic.c:255 dev_watchdog+0x144/0x224()
信息性,8月27日21:55:09,“NETDEV监视程序:eth1(cdc_ether):传输队列0超时”
警告,8月27日21:55:09,“模块链接到:GobiSerial GobiNet g_Ethernet leddrv Cryptor_micro gpio_event_drv[上次卸载:wlan]。”
警告,8月27日21:55:09,“[](展开回溯+0x0/0xdc)自[](警告慢速路径+0x48/0x60)”
警告,8月27日21:55:09,“[](警告慢速路径公共+0x48/0x60)来自[](警告慢速路径fmt+0x24/0x30)
警告,8月27日21:55:09,“来自[](开发看门狗+0x144/0x224)的[](警告慢速路径+0x24/0x30)
警告,8月27日21:55:09,“[](开发看门狗+0x144/0x224)从[](运行计时器软件IRQ+0x138/0x1b4)
警告,8月27日21:55:09,“[](从[]运行计时器软件IRQ+0x138/0x1b4)(“运行计时器软件IRQ+0x70/0xf4)”
警告,8月27日21:55:09,“来自[](irq出口+0x40/0x8c)的[](软件irq+0x70/0xf4)
警告,8月27日21:55:09,“[](irq_出口+0x40/0x8c)来自[](asm_do_irq+0x70/0x8c)
警告,8月27日21:55:09,“[](asm_-do_-IRQ+0x70/0x8c)来自[](_-IRQ-svc+0x30/0x80)”
警告,8月27日21:55:09,“异常堆栈(0xc0ed7f80到0xc0ed7fc8)”
警告,8月27日21:55:09,“7f80:00000000 40000013 00712778 00003505 c0ed6000 c0f11f1c c0a6d3f4 c0ed9bd8”
警告,8月27日21:55:09,“7fa0:80027104 411fc087 000000 1F 00000000 c0edb8e0 c0ed7fc8 c0a85cc4 c0a864a4”
警告,8月27日21:55:09,“7fc0:60000013 FFFFFF”
警告,8月27日21:55:09,“来自[](omap3\U pm\U idle+0x48/0x4c)的[](irq\U svc+0x30/0x80)
警告,8月27日21:55:09,“[](omap3_pm_idle+0x48/0x4c)来自[](cpu_idle+0x48/0x88)”
警告,8月27日21:55:09,“[](cpu空闲+0x48/0x88)来自[](启动内核+0x234/0x28c)”
警告,8月27日21:55:09,“[](启动内核+0x234/0x28c)从[](0x80008034)开始”
警告,8月27日21:55:09,“--[end trace 7fe9ba4a7fb84cb4]--”
这种情况并不经常发生,但发生这种情况时,连接到eth1的模块无法正常工作,只有设备重新启动有帮助

调查这样一个内核问题,或者在以后的内核版本中找到与此相关的最终补丁的过程是什么


谢谢。

由于内核调试是一个非常广泛的主题,因此没有通用的过程。但是,在您的情况下,会出现一条警告,指向打印它的确切代码行-
net/sched/schu generic.c
第255行。您应该从阅读这行代码开始,了解这实际上意味着什么以及为什么会发生这种情况。下一步可能是向该代码或崩溃内核添加一些调试打印,然后对内存转储进行一些事后分析


在您的情况下,它看起来像是一个看门狗功能,不时运行,检查您的设备是否运行良好。我猜你的卡刚刚停止工作,而这个警告正好说明了这一点。在这里,似乎不能怪内核(但这是可能的)。

您运行的是什么系统和内核?你是否认为它可能是由硬件问题引起的?我敢肯定你可以在OMAP3上运行更新的内核。在您的情况下可能吗?不幸的是,运行较新内核是代码中的一次真正革命,短期内不可能实现。在已被阻止的(可能是无辜的)受害者线程中出现“warn_slowpath”跟踪。原因是某些代码(或本例中的硬件)阻止了受害者的执行。一般来说,调试此错误的最佳方法是在发生此错误时转储所有线程的堆栈,以查找原因。