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

How to investigate runtime Linux Kernel warning

我的设备是 运行 基于 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 ]---"

它不经常发生,但当它发生时,连接到 eth1 的模块无法正常工作,只有设备重启才有帮助。

调查此类内核问题或在以后的内核版本中找到与此相关的最终补丁的程序是什么?

谢谢。

内核调试是一个非常广泛的话题,因此没有通用的步骤。但是,在您的情况下,您有一条警告指向打印它的确切代码行 - net/sched/sch_generic.c 第 255 行。您应该首先阅读这行代码并理解这实际上意味着什么以及为什么会发生这种情况.下一步可能是向此代码添加一些调试打印或使内核崩溃,因此对内存转储进行一些 post 事例分析。

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