[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
准备工作:
-
README
建议使用python2
,但由于我本地python2
环境配置始终有无法解决的依赖冲突,而尝试使用python3
,实测是可以成功的,前提是安装如下依赖:$ pip3 install zstandard $ pip3 install prettytable $ pip3 install pyelftools
-
准备gcc的调试工具:
建议从CodeLinaro(前身为CodeAurora)下载,根据内核编译工具链版本,以下以gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
为例; -
在
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