工具准备
crash
crash官网下载源码 crash-7.2.3.tar.gz 之后执行make
dzh@EF-dzh:~/opt/crash-7.2.3$ make target=arm64
TARGET: ARM64
CRASH: 7.2.3
GDB: 7.6
make成功后会在当前目录生产一个名为crash的可执行文件。
gcore
gcore是一个可以从kernel dumpfile里提取的coredump的crash插件。官网在戳这里。这里使用官网说明的第三种方法:
To build the module from the top-level crash-<version> directory, enter:
$ tar xzf crash-gcore-command-1.4.0.tar.gz
$ mv crash-gcore-command-1.4.0/* extensions
$ make extensions
准备ramdump和vmlinux(高通平台)
ramdump
1 不同平台进入dump的条件不同,比如高通平台
2 产生kernel异常使手机进入dump。执行下面的命令,或者有后门长按音量下键12秒。
echo c > /proc/sysrq-trigger
3 进入dump之后连上QPST工具自动拉去ramdump,目录结构如下:
dzh@EF-dzh:~/stability_doc/case/gcore_coredump/dumpfile$ ls
CODERAM.BIN DDRCS0_0.BIN DDRCS1_1.BIN FSM_CTRL.BIN IPA_GSI1.BIN IPA_MBOX.BIN load.cmm MSGRAM11.BIN MSGRAM14.BIN MSGRAM2.BIN MSGRAM5.BIN MSGRAM8.BIN OCIMEM.BIN PMON_HIS.BIN vmlinux
DATARAM.BIN DDRCS0_1.BIN DDR_DATA.BIN FSM_STS.BIN IPA_HRAM.BIN IPA_SEQ.BIN MSGRAM0.BIN MSGRAM12.BIN MSGRAM15.BIN MSGRAM3.BIN MSGRAM6.BIN MSGRAM9.BIN PIMEM.BIN RST_STAT.BIN
DCC_SRAM.BIN DDRCS1_0.BIN dump_info.txt IPA_DRAM.BIN IPA_IRAM.BIN IPA_SRAM.BIN MSGRAM10.BIN MSGRAM13.BIN MSGRAM1.BIN MSGRAM4.BIN MSGRAM7.BIN mzversion.txt PMIC_PON.BIN SHRM_MEM.BIN
vmlinux
vmlinux可以理解为kernel的symbols,它在自己build之后out下的./target/product/sdm845/obj/kernel/msm-4.9/vmlinux目录,服务器编译的版本它在debugs目录。
将它copy到dumpfile目录下:
"/home/dzh/stability_doc/case/gcore_coredump/dumpfile"
gcore提取coredump
解析ramdump
常规做法参考RDP(Linux Ramdump Parser)使用说明:
Android平台代码 vendor/qcom/opensource/tools/linux-ramdump-parser-v2中包含了RDP工具。
使用方法:
1:在工具同文件夹下面创建local_settings.py文件:
dzh@EF-dzh:~/samsung1t/M1971_QPF7_base/vendor/qcom/opensource/tools/linux-ramdump-parser-v2$ touch local_settings.py
然后写入下面类似内容. 工具路径要替换为自己对应目录的
gdb_path = "/home/dzh/samsung1t/M1971_QPF7_base/prebuilts/gdb/linux-x86/bin/gdb"
nm_path = "/home/dzh/samsung1t/M1971_QPF7_base/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-nm"
objdump_path = "/home/dzh/samsung1t/M1971_QPF7_base/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-objdump"
gdb64_path = "/home/dzh/samsung1t/M1971_QPF7_base/prebuilts/gdb/linux-x86/bin/gdb"
nm64_path = "/home/dzh/samsung1t/M1971_QPF7_base/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-nm"
objdump64_path = "/home/dzh/samsung1t/M1971_QPF7_base/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objdump"
2:开始解析:
(解析用法可以使用 --help会列出详细使用方法,工具目录也有readme文件来描述) 简单使用如下
python ramparse.py --vmlinux <vmlinux path> --auto-dump <path to log files> -o <output logs directory path> --everything --force-hardware <chipset number like sdm845, 8909, etc>
For example:
python ramparse.py --vmlinux /home/dzh/dzh-3t/bug/1971_hang/b129/Port_COM3/vmlinux --auto-dump /home/dzh/dzh-3t/bug/1971_hang/Port_COM19/ -o /home/dzh/dzh-3t/bug/1971_hang/ --dmesg --force-hardware msmnile
--everything替换为--dmesg。会快速生成 dmesg_tz.txt
--force-hardware 选择芯片名msmnile是1971的855
-o 指定最后输出的路径
魅族bsp提供ramdump的网络路径,可在线分析直接生生成 dmesg_tz.txt ,获得kaslr kimage_voffset两个参数。
crash 加载ramdump
kaslr kimage_voffset 这两个c参数不同的版本是不同的,需要
dzh@EF-dzh:~/stability_doc/case/gcore_coredump/dumpfile$: ~/opt/crash-7.2.3/crash vmlinux --kaslr=0x1f2ca00000 --machdep kimage_voffset=ffffff9eb4a00000 DDRCS0_0.BIN@0x80000000,DDRCS0_1.BIN@0x100000000,DDRCS1_0.BIN@0x140000000,DDRCS1_1.BIN@0x1c0000000,OCIMEM.BIN@0x14680000,PIMEM.BIN@0x1c000000 -p 4096
使用gcore提取corefile
crash> cd ~/opt/crash-7.2.3/extensions/
crash> extend gcore.so
./gcore.so: shared object loaded
crash> help gcore
crash> gcore -v 0 1416
最后corefile生成在当前目录(/home/dzh/opt/crash-7.2.3/extensions/core.1403.system_server)
网友评论