一、概述:
kernel exception的种类有很多,主要表现为kernel panic,一旦linux kernel发生panic,机器会出现重启,会产生很差的体验,但导致kernel panic的原因有很多,软件和硬件问题都会导致panic,出现panic时需要通过gdb/trace32工具对产生的DB文件根据具体的代码进行分析定位问题,下面会介绍各种kernel exception(简称KE)。
二、execption的种类:
(1)普通的data abort,从SYS_KERNEL_LOG中,可以检索到如下的info:
Unable to handle kernel paging request at virtual address XXXXXXXXX
上面的XXXXXXXX代表某个非法地址。这种类型的KE很常见,导致这种问题的原因可能有:踩内存、硬件Bit位翻转等;
此类问题一般需要同时编译出来的符号表(vmlinux)进行反汇编分析。
(2)主动调BUG的重启Kernel panic,在对应的kernel log中可以看到如下关键字,既可以定位为此类问题:
Kernel BUG at ffffff8008311ac8 [verbose debug info unavailable]
此类BUG,是在代码中出现异常导致调用到BUG()触发的主动重启。
(3)oom 主动触发的panic,从SYS_KERNEL_LOG中,可以检索到如下的info:
Kernel panic - not syncing: Out of memory and no killable processes...
Out of memory意味着已无可用的memory,这样的问题必然存在一些耗费资源的进程耗尽了memory的资源触发的KE。
(4)undefined instruction,未定义指令异常。从SYS_KERNEL_LOG中,可以检索到如下的info:
Internal error: Oops - undefined instruction,此类问题一般是CPU/DRAM不稳定导致的问题。
(5)Watchdog 超时:
a、硬件看门狗超时:
此类异常较为常见,多见于底层频繁irq/bus卡死,导致kicker无法被schedule,从而引起watch dog触发中断,引导系
统进入FIQ处理流程,最终call到BUG触发重启。(表现为HWT和Hardware Reboot)。
b、软件看门狗超时:
MTK平台有hang_detect的机制,system_server进程每30S回去软件喂狗,如果系统卡在超过10min/11min/12min/14min时会
dump出不同的信息用于debug。
上面只是列出了很多不同类型的kernel exception,后面会做详细的说明并贴上分析过程。
作者:frank_zyp
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。