QNX+LA平台在运行过程中可以在android发生crash的时候生成core文件,本文将会介绍如何搭建环境解析gcore文件.
获取gcore文件
在异常情况下或者LA侧手动触发kernel panic的方式获得gcore文件,这个文件通常位于qnx的/var/qnxlogs目录下,完整的文件大小为1.5GB左右(依据你实际分配给LA的内存大小决定)。名字一般为:la_guestdump.gcore.gz
获取qvm_dump_parser工具
这个工具位于qnx源码目录apps/qnx_ap/tools/debug/analyzer_tools/ramdump_parser/qvm_dump_parser/host/linux/x86_64
使用qvm_dump_parser解析gcore文件
指令使用方式:
ubuntu:~/workspace/ramdump$ ./qvm_dump_parser -p la_guestdump.gcore.gz -o output/
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'
Created DDR file 'DDR_4.BIN'
qvm_dump_parser took about 68.27865 seconds
准备ramdump解析脚本
这些文件通常位于android的源码目录下:
PC:~/workspace/lagvm/LINUX/android/vendor/qcom/opensource/tools$ ls
dcc_parser docs ipc_logging linux-ramdump-parser-v2 minidump
准备toolchain
可以通过Linaro Releases 下载 toolchain,请注意下载正确的对应版本:
root@ubuntu:~/ramdump/toolchain$ ls
gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
root@ubuntu:~/ramdump/toolchain$
修改local_settings.py
参考下面的样例修改
root@ubuntu:~/ramdump$ ls linux-ramdump-parser-v2/local_settings.py
linux-ramdump-parser-v2/local_settings.py
root@ubuntu:~/ramdump$ cat linux-ramdump-parser-v2/local_settings.py
import parser_util,os,sys
gdb_path = "~/ramdump/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb"
nm_path = "~/ramdump/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm"
objdump_path = "~/ramdump/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objdump"
gdb64_path = "~/ramdump/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb"
nm64_path = "~/ramdump/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm"
objdump64_path = "~/ramdump/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objdump"
解析gcore文件生成输出结果
使用指令:
python2.7 linux-ramdump-parser-v2/ramparse.py --vmlinux output/vmlinux --auto-dump output/ --force-hardware msmnile -x --dmesg --ipc-skip --dump-ftrace -o parser_output/
root@ubuntu:~/ramdump$ python2.7 linux-ramdump-parser-v2/ramparse.py --vmlinux output/vmlinux --auto-dump output/ --force-hardware msmnile -x --dmesg --ipc-skip --dump-ftrace -o parser_output/
[1/46] --sched-info ... 0.325290s
[2/46] --cbmem ... 0.074428s
[3/46] --clock-dump ... 0.796523s
[4/46] --cpr3-info ... NOTE: 'kryo_regulator_list' list not found to extract kryo_addr information
0.070664s
[5/46] --cpr-info ... 0.040970s
[6/46] --cpu-state ... 0.061613s
[7/46] --ddr-compare ... 2.797104s
[8/46] --check-for-watchdog ... 0.027185s
[9/46] --watchdog ... FAILED! 3.434677s
[10/46] --parse-debug-image ... 15.624387s
[11/46] --dmesg ... 0.478022s
[12/46] --print-filetracking ... 538.393242s
[13/46] --dump-ftrace ... 0.000149s
[14/46] --print-iommu-pg-tables ... FAILED! 1.074231s
[15/46] --print-ipc-logging ... Skipping IPC log extraction. 0.000034s
[16/46] --print-irqs ... 1.258463s
[17/46] --print-kconfig ... 0.008418s
[18/46] --l1-compare ... 0.000442s
[19/46] --lockdep-heldlocks ... 0.000082s
[20/46] --logcat ... 10.388355s
[21/46] --lpm ... 0.231866s
[22/46] --print-mdpinfo ... 0.085260s
[23/46] --print-memstat ... FAILED! 0.389625s
[24/46] --print-memory-info ... 0.805391s
[25/46] --mmcdoctor ... FAILED! 0.000432s
[26/46] --dump-page-tables ... 0.000225s
[27/46] --print-pagealloccorruption ... 0.000069s
[28/46] --print-pagetracking ... 0.096157s
[29/46] --print-pagetypeinfo ... 0.904282s
[30/46] --pstore ... FAILED! 0.274362s
[31/46] --print-reserved-mem ... 0.104845s
[32/46] --print-cma-areas ... FAILED! 4.287186s
[33/46] --print-softirq-stat ... 0.112831s
[34/46] --print-qsee-log ... 0.072410s
[35/46] --check-rodata ... FAILED! 0.816940s
[36/46] --print-rtb ... 0.049366s
[37/46] --print-runqueues ... 2.128628s
[38/46] --spm ... 0.000399s
[39/46] --print-tasks ... 4.178147s
[40/46] --print-tasks-timestamps ... 0.687941s
[41/46] --check-for-panic ... 0.044627s
[42/46] --thermal-info ... 0.481725s
[43/46] --timer-list ... 1.177844s
[44/46] --print-vmalloc ... 3.291382s
[45/46] --print-vmstats ... 1.485176s
[46/46] --print-workqueues ... 0.982326s
解析得到的内容:
root@ubuntu:~/ramdump/parser_output$ ls
ClockDumps.txt cprinfo.txt l1_cache.txt mem_stat.txt spm.txt tasks_sched_stats1.txt tasks_sched_stats6.txt tmc-etf-swao.bin
cma_report_dma_contiguous_default_area.txt DDRCacheCompare.txt launch_t32.sh page_tables.txt t32_config.t32 tasks_sched_stats2.txt tasks.txt tmc-etr.bin
cma_report_simple.txt dmesg_TZ.txt logcat.bin qsee_log.txt t32_startup_script.cmm tasks_sched_stats3.txt thermal_info.txt vmalloc.txt
console_logs.txt file_tracking.txt lpm.txt reserved_mem.txt tasks_highlight.txt tasks_sched_stats4.txt timerlist.txt
cpr3_info.txt kconfig.txt memory.txt roareadiff.txt tasks_sched_stats0.txt tasks_sched_stats5.txt tmc-etf.bin