如果遇到内核崩溃(KE),请将log(手机的/data/aee_exp/*,和t卡/sdcard的mtklog目录)和同一次编译生成的vmlinux(用于还原当时的现场,查看函数,解析地址等),两者缺一不可。
如何判断vmlinux和log是否匹配也是非常重要,否则log里的地址和vmlinux对应不上,问题也无法分析。
- vmlinux存放的位置:JB及以前的版本在alps/kernel/out/vmlinux(或alps/kernel/vmlinux),KK及之后版本在out/target/product/$proj/obj/KERNEL_OBJ/vmlinux。
- 用文本工具或UltraEdit打开vmlinux,搜索字符串(注意是大写)SMP PREEMPT,可以搜到类似SMP PREEMPT Tue Nov 20 13:15:21 CST 2018,里面有编译时的时间。
- 查找log对应的kernel编译时间:
a. 在异常手机的mobile log里有properties或versions文件,里面搜索SMP PREEMPT(可能没有这些信息)
b. 在异常手机里的KE db用log viewer(GAT里的log viewer)解开后的SYS_VERSION_INFO文件
c. 也可以从kernel_log.boot里找到(在开机log的tick 0会吐版本信息,但通常会被冲走)
d. 如果异常的手机还在的话,可以连上adb,用cat /proc/version也可以。 - 对比两个字符串是否一样,一样表示是同一时间编译的(也就是该vmlinux和log是匹配的)