[Android]使用linux-ramdump-parser-v2解析gcore文件

[Android]使用linux-ramdump-parser-v2解析gcore文件

准备工作

  • qvm_dump_parser
  • linux-ramdump-parser-v2
  • python
  • gcore文件
  • 对应软件版本的vmlinux与wlan.ko文件;

解析gcore为ramdump

gcore文件为高通Q+A平台下,qvm ramdump的产物,其中包含了gvm内核crash的各种信息,因此首先需要将gcore文件解压并解析为ramdump文件:
需要命令行工具:qvm_dump_parser
存放路径:qnx/workspace/modules/bsp/apps/qnx_ap/tools/debug/analyzer_tools/ramdump_parser/qvm_dump_parser/host/linux/x86_64
命令示例:

$ mkdir ramdump
$ ./qvm_dump_parser -p la_guestdump_xxx.gcore.gz -o ./ramdump/
Attempting to decompress the gcore zip file.
Attempting to generate the OCIMEM and RESET_INFO binary files.
Attempting to generate the DDR binary files. Takes 2-3 mintues. Please wait!! 
Created DDR file 'DDR_0.BIN'
Created DDR file 'DDR_1.BIN'
Created DDR file 'DDR_2.BIN'
Created DDR file 'DDR_3.BIN'
qvm_dump_parser took about 94.58901 seconds

产物实例

$ ls ramdump
DDR_0.BIN  DDR_1.BIN  DDR_2.BIN  DDR_3.BIN  dump_info.txt  load.cmm  OCIMEM.BIN  RESET_INFO.BIN

这个产物跟高通Android手机ramdump的产物基本一致,有兴趣的可以是使用crash工具解析尝试,但不保证成功:参考步骤

Q+A平台最好还是用高通平台附带的linux-ramdump-parser-v2来解析:

使用linux-ramdump-parser-v2解析ramdump

准备工作:

  1. README建议使用python2,但由于我本地python2环境配置始终有无法解决的依赖冲突,而尝试使用python3,实测是可以成功的,前提是安装如下依赖:

    $ pip3 install zstandard
    $ pip3 install prettytable
    $ pip3 install pyelftools
    
  2. 准备gcc的调试工具:
    建议从CodeLinaro(前身为CodeAurora)下载,根据内核编译工具链版本,以下以gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz为例;

  3. linux-ramdump-parser-v2仓库根目录下,创建一个名为local_settings.py的文件,并编写如下内容:

    import parser_util,os,sys
    
    gcc_path = "/where/you/store/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu"
    
    gdb_path = gcc_path + "/bin/aarch64-linux-gnu-gdb"
    nm_path = gcc_path + "/bin/aarch64-linux-gnu-nm"
    objdump_path = gcc_path + "/bin/aarch64-linux-gnu-objdump"
    gdb64_path = gcc_path + "/bin/aarch64-linux-gnu-gdb"
    nm64_path = gcc_path + "/bin/aarch64-linux-gnu-nm"
    objdump64_path = gcc_path + "/bin/aarch64-linux-gnu-objdump"
    

    当然也可以后面通过命令行参数带入,只是比较麻烦;

需要命令行工具:linux-ramdump-parser-v2
存放路径:vendor/qcom/opensource/tools/linux-ramdump-parser-v2
命令实例:

$ mkdir output
$ python3 ./ramparse.py -v /where/you/store/vmlinux --auto-dump=/where/you/store/ramdump --force-hardware msmnile -x --dump-ftrace --wlan ~/where/you/store/wlan.ko -o output/

如果发现没有输出直接结束,查看生成的文件中有一个dmesg_TZ.txt,打开查看报错原因;
如果遇到如下报错:

!!! A bogus hardware id was specified: msmnile
!!! Supported ids:
!!! No registered Boards found - check extensions/board_def.py

extensions/board_def.py这个文件没有找到,那么可能是缺少依赖仓库所致,可以联系高通索取,但最快的方式是回退这笔提交:ddb99892d99fab7b98304219ad9afbb1ad51516f

如果出现如下输出,则说明解析正常(部分失败可以无视,只要不是自己关注的部分):

    [1/65] --sched-info ... 1.241521s
    [2/65] --cbmem ... 0.055170s
    [3/65] --clock-dump ... 0.608722s
    [4/65] --print-svm-vcpu-ctx ... 0.001273s
    [5/65] --cpr3-info ... 0.056111s
    [6/65] --cpr-info ... 0.028388s
    [7/65] --cpu-state ... 0.011805s
    [8/65] --ddr-compare ... 1.667292s
    [9/65] --check-for-watchdog ... 0.034490s
    [10/65] --watchdog ... 1.935873s
    [11/65] --parse-debug-image ... 0.996706s
    [12/65] --dmesg ... 0.314456s
    [13/65] --dtb ... 0.018805s
    [14/65] --print-f2fs ... 1.254938s
    [15/65] --print-filetracking ... 428.115680s
    [16/65] --print-tasks ... 2.821398s
    [17/65] --print-tasks-timestamps ... 0.019718s
    [18/65] --check-for-panic ... 0.052171s
    [19/65] --dump-ftrace ... 0.000097s
    [20/65] --hotplug ... 0.398677s
    [21/65] --hyp-log ... FAILED! 
0.000799s
    [22/65] --print-iommu-pg-tables ... 0.943832s
    [23/65] --ipa ... 3.835940s
    [24/65] --ipc_logging ... 0.880440s
    [25/65] --print-irqs ... 0.880148s
    [26/65] --kbootlog ... 0.042961s
    [27/65] --print-kconfig ... 0.003220s
    [28/65] --l1-compare ... 0.000296s
    [29/65] --lockdep-heldlocks ... 1.712348s
    [30/65] --properties ... 0.853913s
    [31/65] --logcat ... struct timezone --> tz_minuteswest= -480min
1.163315s
    [32/65] --logcat-v2 ... FAILED! 
0.008900s
    [33/65] --lpm ... 0.433297s
    [34/65] --print-mdssinfo ... 0.057711s
    [35/65] --print-memstat ... 0.175708s
    [36/65] --print-memory-info ... 0.527341s
    [37/65] --mmcdoctor ... 0.014057s
    [38/65] --modules_table ... FAILED! 
0.257620s
    [39/65] --dump-page-tables ... 0.000231s
    [40/65] --print-pagealloccorruption ... FAILED! 
0.192248s
    [41/65] --print-pagetracking ... 873.940762s
    [42/65] --print-pagetypeinfo ... 0.419558s
    [43/65] --pstore ... 0.185857s
    [44/65] --qrtr-ports ... 0.997343s
    [45/65] --regulator ... 2.228418s
    [46/65] --print-reserved-mem ... 0.071800s
    [47/65] --print-cma-areas ... 6.476044s
    [48/65] --print-softirq-stat ... 0.186453s
    [49/65] --print-qsee-log ... 0.180481s
    [50/65] --rm-log ... FAILED! 
0.000503s
    [51/65] --check-rodata ... 0.841756s
    [52/65] --print-rtb ... 3.431323s
    [53/65] --print-runqueues ... 1.465085s
    [54/65] --smmu-s1-fault ... Unknown message disregarded, line says: missing tcu_testbus_version property

Unknown message disregarded, line says: 	non-coherent table walk

Unknown message disregarded, line says: 	(IDR0.CTTW overridden by FW configuration)

Unknown message disregarded, line says: 	stream matching with 170 register groups

0.069824s
    [55/65] --spm ... 0.000112s
    [56/65] --thermal-info ... 0.297653s
    [57/65] --thermal-temp ... 0.033862s
    [58/65] --timer-list ... 0.920373s
    [59/65] --ubwcp ... 0.045933s
    [60/65] --uevent ... FAILED! 
1.642201s
    [61/65] --vm-minidump-sample ... FAILED! 
0.002100s
    [62/65] --print-vmalloc ... 2.248857s
    [63/65] --print-vmstats ... 4.256387s
    [64/65] --wakeup ... 0.700215s
    [65/65] --print-workqueues ... 0.523818s

产物示例:

$ ls
output/ClockDumps.txt                              kernel_boot_log.txt   msm_rtb4.txt                 spm.txt
cma_report_cnss_wlan_region.txt             kva_output.txt        msm_rtb5.txt                 t32_config.t32
cma_report_dma_contiguous_default_area.txt  l1_cache.txt          msm_rtb6.txt                 t32_startup_script.cmm
cma_report_mem_dump_region.txt              launch_t32.sh         msm_rtb7.txt                 tasks_highlight.txt
cma_report_secure_display_region.txt        lockdep.txt           page_corruption_summary.txt  tasks_sched_stats
cma_report_simple.txt                       Logcat_v3_events.txt  page_frequency.txt           tasks.txt
cpr3_info.txt                               Logcat_v3_kernel.txt  page_ranges.txt              thermal_info
cprinfo.txt                                 Logcat_v3_main.txt    page_tables.txt              timerlist.txt
DDRCacheCompare.txt                         Logcat_v3_radio.txt   page_tracking_freed.txt      tmc-etf.bin
devicetree.dtb                              Logcat_v3_system.txt  page_tracking.txt            tmc-etf-swao.bin
dmesg_TZ.txt                                lpm.txt               pagetypeinfo.txt             uevent.txt
epoch_info.txt                              memory.txt            Properties.txt               vmalloc.txt
f2fs_info.txt                               mem_stat.txt          qrtr_port.txt                vmstats.txt
file_tracking.txt                           modules_table.txt     qsee_log.txt                 vm_vcpu_context.txt
hotplug.txt                                 msm_rtb0.txt          regulator.txt                wakeup_resource.txt
ipalog.txt                                  msm_rtb1.txt          reserved_mem.txt
ipc_logging                                 msm_rtb2.txt          roareadiff.txt
kconfig.txt                                 msm_rtb3.txt          sdi_dump_table.txt

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值