[Android稳定性] 第026篇 [方法篇] 在windows平台安装Linux ramdump parser工具

一、安装python工具

前往网站(https://www.python.org/downloads/)下载python安装包,python >= 3.6.8即可

  1. 安装python工具到一个目录,比如:C:\Python36
  2. 进入到C:\Python36\Scripts目录中,使用pip指令安装库
    1
    2
    pip install psutil
    pip install pyelftools

二、获取linux ramdump parser工具

2.1 Opensource

vendor/qcom/opensource/tools

1
2
git clone e https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/tools.git
git checkout -b opensource-tools.lnx.1.0 remotes/origin/opensource-tools.lnx.1.0

2.2 proprietary

vendor/qcom-proprietary/ramdump-parser

将下面这个目录的文件拷贝到目标目录

源目录:

vendor/qcom-proprietary/ramdump-parser/\

目标目录:

vendor/qcom/opensource/tools/linux-ramdump-parser-v2/extensions

2.3 整合

将第2.1和第2.2的工具进行整合,放在一个指定目录,比如 C:\tools

三、编写解析脚本

1
2
3
4
5
set PYTHON3="c:\Python36\python.exe"
set dir=d:\Port_COM7
set PARSER=c:\tools\linux-ramdump-parser-v2\ramparse.py
%PYTHON3% %PARSER% -a %dir% -v %dir%\vmlinux -o %dir%\cmdparser --force-hardware diwali --dmesg -x
pause

参数:–force-hardware 后跟的是项目target名

对于target,请查看board_def.py文件中是否有定义!

1
tools/linux-ramdump-parser-v2/extensions/board_def.py

如果没有,可以提case给高通咨询

四、编译工具链

linux ramdump parser工具需要三个工具,分别是gdb、nm以及objdump

4.1 gdb工具下载

aarch64-linux-gnu-gcc-gdb.exe is from linaro for 64bit dump for 32bit dump, arm-eabi-gdb.exe is the counterpart

可以在下面的链接中下载:

gnu下载链接

由于一些内核版本很高,导致低版本gdb无法正确解析vmlinux,所以尽可能使用版本比较高的gdb,可以下载下面这个

gdb下载链接

4.2 nm以及objdump下载

同样因为内核版本很高,gnu tools中的objdump和nm已经无法正常解析了。所以需要切换到llvm版本

这个工具可以在高通的QPM软件中进行下载

下载过程中,会由你选择安装目录,默认是在C:\Qualcomm\SnapdragonLLVMARM\16.5.2.0\bin

在这个目录下就可以看到我们需要的llvm-nm.exe以及llvm-objdump.exe

4.3 工具链整合

将第4.1下载到的gdb和4.2中下载的llvm-nm以及llvm-objdump放在一个目录下,比如tools/ramparser_utils/windows_utils/

五、增加local_setting.py

在如下目录中新增该文件,文件中指定工具链的地址

1
tools/linux-ramdump-parser-v2/local_setting.py
1
2
3
4
5
6
7
8
#nm_path = "xxxxxxx"
#gdb_path = "xxxxxxxxxx"
#objdump_path = "xxxxxxxxxxxxx"

nm64_path = "C:\\tools\\ramparser_utils\\windows_utils\\llvm-nm.exe"
gdb_path = "C:\\tools\\ramparser_utils\\windows_utils\\gdb.exe"
objdump64_path = "C:\\tools\\ramparser_utils\\windows_utils\\llvm-objdump.exe"