展訊平臺 kernel重啟分析套路總結
一.初步定為分析
在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