內核、系統啓動崩潰分析

MTK把內核panic轉化爲文件和行號的方法:http://blog.chinaunix.net/uid-29728680-id-5736563.html
例如系統啓動過程中,內核log中有一下錯誤
[ 3.990587] <4>.(4)[1:swapper/0]Unable to handle kernel NULL pointer dereference at virtual address 00000002
。。。。。。。
[ 4.091485] <4>-(4)[1:swapper/0]task: ffffffc07954a000 ti: ffffffc07954c000 task.ti: ffffffc07954c000
[ 4.092642] <4>-(4)[1:swapper/0]PC is at da9214_read_byte+0x4c/0xd4
[ 4.093418] <4>-(4)[1:swapper/0]LR is at da9214_read_byte+0x38/0xd4
[ 4.094197] <4>-(4)[1:swapper/0]pc : [<ffffffc00048792c>] lr : [<ffffffc000487918>] pstate: 60000045
[ 4.095335] <4>-(4)[1:swapper/0]sp : ffffffc07954f910

分析過程:
1.由[ 3.990587] <4>.(4)[1:swapper/0]Unable to handle kernel NULL pointer dereference at virtual address 00000002可以知道,錯誤出現在內核中:
Unable to handle kernel-------------->錯誤出現在內被
Unhandled page fault---------------->錯誤出現在系統應用層。
2.由PC,lR中的的函數可以知道內核錯誤的具體位置。
3.如果沒有列出函數名稱,可以由lr : [<ffffffc000487918>]中的地址在system.map文件中找到相對於的函數
4.可以用arm-linux-objdump -D test_debug > test_debug.dis/arm-none-eabi-objdump反編譯內核模塊生成的ko/o文件,根據da9214_read_byte+0x4c/0xd4裏面的偏移量找到是函數中的具體哪行代碼。
5.應用執行過程中如果出錯,也可以反編譯找出出錯的函數位置。

由PC地址:
[ 2.876681] <1>-(1)[1:swapper/0]Hardware name: MT6797 (DT)
[ 2.877366] <1>-(1)[1:swapper/0]task: ffffffc07c54a000 ti: ffffffc07c54c000 task.ti: ffffffc07c54c000
[ 2.878521] <1>-(1)[1:swapper/0]PC is at DAL_SetScreenColor+0x70/0xa0
[ 2.879320] <1>-(1)[1:swapper/0]LR is at DAL_SetScreenColor+0x5c/0xa0
[ 2.880121] <1>-(1)[1:swapper/0]pc : [<ffffffc000528760>] lr : [<ffffffc00052874c>] pstate: 80000045
[ 2.881258] <1>-(1)[1:swapper/0]sp : ffffffc07c54fb80

得到
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -Cfe out/target/product/feima6797_4u_m/obj/KERNEL_OBJ/vmlinux 0xffffffc000528760
DAL_SetScreenColor
/home/zhangwp/work/HuBa/newhuba_test_258_0603/kernel-3.18/drivers/misc/mediatek/video/mt6797/videox/disp_assert_layer.c:149

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章