一.初步定为分析
在ylog的phone.info中搜索关键词 bootmode
例如:
[ro.bootmode]: [panic]
可以确定是kenel panic导致的手机重启
二.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 !
三.发送Kernel Panic该怎么办
1.首先需要自己拉代码编译user版本的项目,并默认开启sysdump(sysdump在userdebug版本中默认开启的)
修改以下代码device\sprd\xxxx\common\rootdir\root\init.common.rc
在 on post-fs-data 下添加:
-
// 设置 Ylog 默认开启开关 1 开启,0或不写 关闭
-
setprop persist.ylog.enabled 1
-
start ylog
-
// 设置sysdump 默认开关属性值 开启为true 关闭 false
-
setprop debug.sysdump.enabled true
-
setprop persist.sys.eng.reset 0
2.插入SD卡 抓取Sysdump log,一定插入大于8G的T卡,并事先清空,保证足够大的内存
3.sysdump log 分析
1)将ylog-ap-SYSDUMP下的sysdump.core.*复制到对应项目的vendor\sprd\tools\crash下
2)将out/target/product/xxxx/obj/KERNEL/下的vmlinux也copy到vendor\sprd\tools\crash下
3)cd到vendor\sprd\tools\crash,查看是否copy成功
4)cat sysdump.core.* >log(log是文件名,可以随意起),将所有的sysdump.core文件集成到一个文件中
5)ls 查看是否集成文件生成
6)执行命令 ./crash_arm vmlinux log(这里的log指第四步中创建的集成文件),使用 crash_arm 脚本 和 vmlinux 解析 sysdump log
7)log >aaa.txt,此处的log是执行命令,将log输入到aaa.txt文件中
8)分析生成的aaa.txt
可以看出是Fatal exception, sprd_sysdump_info->crash_key: 0导致的reboot