这是 Linux 内核崩溃吗?我该如何解决?

Is this a Linux Kernel Crash? How do I resolve it?

我们正在嵌入式 linux 上测试防火墙应用程序 运行。在测试期间的某个时刻,linux 挂起(冻结)并且我们在控制台上看到以下内容:

TCHDOG: eth0 (fsl-gianfar): transmit queue 0 timed out
------------[ cut here ]------------ WARNING: at net/sched/sch_generic.c:279 Modules linked in: CPU: 0 PID: 0 Comm:
swapper/0 Not tainted 3.12.19-rt30-gc29fe1a #27 task: c08f9300 ti:
effea000 task.ti: c093a000 NIP: c052a98c LR: c052a98c CTR: c0327948
REGS: effebe60 TRAP: 0700   Not tainted  (3.12.19-rt30-gc29fe1a) MSR:
00029000 <CE,EE,ME>  CR: 44044022  XER: 20000000

GPR00: c052a98c effebf10 c08f9300 0000003f c128c484 c128c9d0 c0328b54
00021000  GPR08: 00000001 00000001 0099b000 00000312 24044024 0f003103
effea000 c07f6f28  GPR16: 00000100 00200000 c0940000 c08f0000 001631a5
00000000 000000a4 ffffffff  GPR24: 00000000 00000000 effea000 00000004
c0940000 c0940000 c74d0000 00000000  NIP [c052a98c]
dev_watchdog+0x2dc/0x2ec LR [c052a98c] dev_watchdog+0x2dc/0x2ec Call
Trace: [effebf10] [c052a98c] dev_watchdog+0x2dc/0x2ec (unreliable)
[effebf40] [c005194c] call_timer_fn.isra.29+0x28/0x84 [effebf60]
[c0051b28] run_timer_softirq+0x180/0x1fc [effebfa0] [c004a5e8]
__do_softirq+0x100/0x1cc [effebff0] [c000d6e8] call_do_softirq+0x24/0x3c [c093be60] [c0004920] do_softirq+0x90/0xb8
[c093be80] [c004afb4] irq_exit+0xa4/0xc8 [c093be90] [c0009c10]
timer_interrupt+0x1a4/0x1d0 [c093bec0] [c000f594]
ret_from_except+0x0/0x18
--- Exception: 901 at arch_cpu_idle+0x24/0x5c
    LR = arch_cpu_idle+0x24/0x5c [c093bf80] [c00ac4ec] rcu_idle_enter+0xac/0xec (unreliable) [c093bf90] [c0086b00]
cpu_startup_entry+0x120/0x170 [c093bfc0] [c08a97a8]
start_kernel+0x2f0/0x304 [c093bff0] [c00003fc] skpinv+0x2e8/0x324
Instruction dump: 4e800421 80fe0204 4bffff44 7fc3f378 4bfe72e5
7fc4f378 7c651b78 3c60c085  7fe6fb78 38632bf0 4cc63182 48184835
<0fe00000> 39200001 993c9c37 4bffffb4 
---[ end trace d3f58d6e7db83823 ]---

是否内核崩溃?是什么原因造成的?我该如何解决?如果您需要任何其他信息,请告诉我。

因为 we/I 不知道,你在不深入研究代码的情况下到底在做什么。但是,这里尝试分析一下 ;)

WARNING: at net/sched/sch_generic.c:279 Modules linked in: CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.19-rt30-gc29fe1a 在某些内核数据旁边显示(not tainted 表示您没有加载闭源驱动程序)崩溃发生 here。堆栈跟踪验证这也是原因。虽然这一行本身并没有太大帮助(对我来说,我不喜欢内核源代码),但它表明网络调度程序失败了。如果你的防火墙不知何故弄乱了它,你应该开始在那里搜索。

如果没有,您可能遇到了真正的内核错误。如果可能,首先要做的是更新您的版本。在撰写本文时,有 3.19 和 4.1 可用。如果这没有帮助(或者你真的需要这个版本),你可以 file a kernel bug。由于您的内核没有受到污染,您可以期待开发人员的帮助。祝你好运:)

不,这不是内核崩溃。

这是来自监视 Freescale Gianfar 以太网驱动程序传输工作的内部看门狗定时器的警告通知。

该消息表示驱动程序已将一个或多个帧排队等待传输和超时,从已传输它们的 Ginafar 硬件获取传输确认中断(或其他指示)。

这可能是驱动程序问题 - 但很可能是硬件问题(例如以太网 MAC 卡住)。

顺便说一句,消息的内容说您的系统在看门狗计时器发生时没有做任何事情(空闲)。