Android系统类问题分析方法
来自个人维基
MTK平台
1、db分析
会在/data/aee_exp下生成db文件,解析出来后可以得到许多文件,这里面有很多价值的信息。
如 hw reboot时的 SYS_LAST_KMSG(有时没有这部分内容,这时可以多试几次,后面可能就会包含这些信息):
CPU 0, nested_panic_time=0 wdt restart. wdt hw reboot mode. Nested panic Log for the previous panic: pc: c0440e14 lr: c00d75a8 psr: 60000113 sp: daf49d08 ip: c0a134c8 fp: daf49d2c r10: 00000000 r9: 00000000 r8: 00000000 r7: 00000002 r6: c038581c r5: 00000000 r4: 00000000 r3: 271ae919 r2: 271ae919 r1: 00000000 r0: 00000033 Log for the current panic: pc: c03eb6b4 lr: c03eb6b0 psr: a00001d3 sp: daf49860 ip: daf49860 fp: daf4988c r10: 00000000 r9: 00000092 r8: 12ebf63b r7: 8421b1a1 r6: 36b4a597 r5: c128d334 r4: c128f308 r3: f900dc00 r2: 00000000 r1: 00000000 r0: 0000001
上面这些信息是mtk加的aee驱动模块所产生的,代码在kernel/mediatek/kernel/drivers/aee/common/reboot-reason.c,可以通过 previous panic中的pc进行gdb定位函数及文件行号(不要用addr2line,因为它只能定位行号,没有函数,这样遇到通用的inline函数时不好定位模块!)
2、hw reboot
mtk给CPU每个核都加了一个daemon,它是一个实时进程,所做的唯一事情就是喂狗,时间是20s,而看门狗的超时时间是30s。
当看门狗超时时就认为是出现异常,这时就会产生一个firq中断,把当前的一些信息记录下来,并保存到/data/aee_exp中。
在产生firq中断时,还会起另一个看门狗定时器,时间是10s,如果发现firq中断都无法响应则直接进入hw reboot流程,记录可能的信息并硬件重启。
——这种现象一般为硬件异常,如layerout导致电压不稳,CPU工作不稳定,无法正常运行
而如果firq有响应,但在响应打印现场时又发生异常,则转入hw reboot,把previous panic和current panic中的相关寄存器打印,然后重启。
——这种现象一般为软件异常,aee最多只记录两次KE,出现多次时则直接进入hw reboot流程