一.初步定為分析
在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