1. 程式人生 > >展訊平臺 kernel重啟分析套路總結

展訊平臺 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 下新增:

  1. // 設定 Ylog 預設開啟開關 1 開啟,0或不寫 關閉

  2. setprop persist.ylog.enabled 1

  3. start ylog

  4. // 設定sysdump 預設開關屬性值 開啟為true 關閉 false

  5. setprop debug.sysdump.enabled true

  6. 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