美文网首页Android 开发体系
gcore提取coredump方法

gcore提取coredump方法

作者: lynn_doo | 来源:发表于2018-12-26 10:41 被阅读0次

工具准备

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)

相关文章

网友评论

    本文标题:gcore提取coredump方法

    本文链接:https://www.haomeiwen.com/subject/rhasvftx.html