Linux内核panic

 

在多核系统中,包括AP应用处理器、mcu微控制器和modem处理器等系统中,mcu控制器用于系统的低功耗控制,mcu微控制器由于某种原因超时向AP应用处理器发送一个超时中断,AP接受中断后调用中断处理函数读取mcu的状态寄存器,发现是mcu的超时中断,就在中断处理程序中主动引用一个空指针,迫使AP处理器打印堆栈信息然后重启linux系统。这就是一个典型的hard panic,这里不对mcu超时原因做深入的分析,只是用来说明hard panic产生的机理。

要确认是否有一个足够的栈跟踪信息,你只要查找包含”EIP”的一行,它显示了是什么函数和模块调用时导致panic。

4. soft panic
4.1 症状:
没有hard panic严重
通常导致段错误(segmentation fault)
可以看到一个oops信息,/var/log/messages里可以搜索到’Oops’

 

凡是非中断处理引发的模块崩溃都将导致soft panic。在这种情况下,驱动本身会崩溃,但是还不至于让系统出现致命性失败,因为它没有锁定中断处理例程。

 

     “致命异常(fatal exception)表示一种例外情况,这种情况要求导致其发生的程序关闭。

Kernel panic-not syncing fatal exception。很多情况是由于板载声卡、网卡、或是cpu 超线程功能(Hyper-Threading )引起的。这类问题的解决办法就是先查看错误代码中的信息,找到错误所指向的硬件,将其禁用。系统启动后,安装好相应的驱动,再启用该硬件即可。

 

6.2 分析kernel panic
搜集了足够的panic信息,下面就是分析panic的时候了,对于一个panic问题,你要知道三点:
(1) 首先要对汇编语言有一定的了解,定位panic产生的C代码位置

kernel panic的产生一般都是非法地址的引用,尤其是NULL指针的引用,这也比较容易定位出panic的C代码行。

在碰到panic问题定位时,如果想当一段时间内定位不出来,又没有什么更好的思路时,你应该回头看看在panic之前kernel是否产生了哪些不太正常的log,这也许就是导致kernel panic的前兆或推手。

 

 


Linux Kernel Panic的产生的原因

     panic是英文中是惊慌的意思,Linux Kernel panic正如其名,linux kernel不知道如何走了,它会尽可能把它此时能获取的全部信息都打印出来。

有两种主要类型kernel panic,后面会对这两类panic做详细说明:

1.hard panic(也就是Aieee信息输出)
2.soft panic (也就是Oops信息输出)

2. 常见Linux Kernel Panic报错内容:

(1) Kernel panic-not syncing fatal exception in interrupt
(2) kernel panic – not syncing: Attempted to kill the idle task!
(3) kernel panic – not syncing: killing interrupt handler!
(4) Kernel Panic – not syncing:Attempted to kill init !

3. 什么会导致Linux Kernel Panic?

     只有加载到内核空间的驱动模块才能直接导致kernel panic,你可以在系统正常的情况下,使用lsmod查看当前系统加载了哪些模块。
除此之外,内建在内核里的组件(比如memory map等)也能导致panic。只有加载到内核空间的驱动模块才能直接导致kernel panic,

posted @ 2022-03-23 08:12  major825  阅读(755)  评论(0)    收藏  举报