3 了解printk

kernel log

最初学编程时,大家一定用过printf(),在kernel里有对应的函数,叫printk()。

最简单的调试方法就是用printk()印出你想知道的信息了,而前面章节讲到oops/panic时,它们就通过printk()将寄存器信息/堆栈信息打印到kernel log buffer里。

了解kernel log对问题的调试将非常重要,这里有专门的课程介绍,请看:

  • MediaTek On-Line> Quick Start> Deep in MTK Turnkey Solution Logging Tools> Kernel log。

可以看到kernel log可以通过串口输出,也可以在发生oops/panic后将buffer保存成文件打包到db里,然后拿到串口log或db对kernel进行调试分析了。

通常手机会保留串口测试点,但要抓串口log一般都要拆机,比较麻烦。前面讲到可以将kernel log保存成文件打包在db里,db是什么东西?

AEE db

db是叫AEE(Android Exception Engine,集成在Mediatek手机软件里)的模块检查到异常并收集异常信息生成的文件,里面包含调试所需的log等关键信息。db有点像飞机的黑匣子。

对于KE来说,db里包含了如下文件(db可以通过GAT工具解开,请参考附录里的FAQ):

__exp_main.txt:异常类型,调用栈等关键信息。

_exp_detail.txt:详细异常信息

SYS_ANDROID_LOG:android main log

SYS_KERNEL_LOG:kernel log

SYS_LAST_KMSG:上次重启前的kernel log

SYS_MINI_RDUMP:类似coredump,可以用gdb/trace32调试

SYS_REBOOT_REASON:重启时的硬件记录的信息。

SYS_VERSION_INFO:kernel版本,用于和vmlinux对比,只有匹配的vmlinux才能用于分析这个异常。

SYS_WDT_LOG:看门狗复位信息

......

以上这些文件一般足以调试KE了,除非一些特别的问题需要其他信息,比如串口log等等。

你可能感兴趣的:(MTK)