1、环境准备

a、gcc工具链

代码中:prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin(缺少gdb)

git clone https://android-git.linaro.org/git/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9-linaro.git

b、TRACE32安装

c、Qcom Parser

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

d、local srcipt

#run_ramdump.sh#! /bin/bashecho ""echo "Start ramdump parser.."local_path=$PWDramdump=$local_path/vmlinux=$local_path/vmlinuxout=$local_path/outgdb=/mnt/work/tools/aarch64-linux-android-4.9-linaro/bin/aarch64-elf-linux-android-gdbnm=~/tools/gnu-tools/aarch64-linux-android-4.9/bin/aarch64-linux-android-nmobjdump=~/tools/gnu-tools/aarch64-linux-android-4.9/bin/aarch64-linux-android-objdump# git clone git://codeaurora.org/quic/la/platform/vendor/qcom-opensource/toolsramparse_dir=/media/ubuntu/code/XXXX_dev/vendor/qcom/opensource/tools/linux-ramdump-parser-v2echo "cd $ramparse_dir"cd $ramparse_direcho ""echo -e "python3 ramparse.py -v $vmlinux -g $gdb  -n $nm  -j $objdump -a $ramdump -o $out -x"echo ""# python 3.5
# lagoon check platform
python3 ramparse.py -v $vmlinux -g $gdb  -n $nm  -j $objdump -a $ramdump -o $out -x --force-hardware lagooncd $local_pathecho "out: $out"echo ""exit 0

e、拷贝vmlinux及脚本至dump log中,指向脚本./run_ramdump.sh

f、平台选择  --force-hardware lagoon 不同,具体可参考code配置

/media/ubuntu/code/xxxx_dev/vendor/qcom/proprietary/ramdump-parser/board_def.py

g、代码中缺少local_settings.py (gdb等配置文件),需要建一个空文件,跳过异常

h、部分代码,报错是因为缺少链接相关:( No registered Boards found - check extensions/board_def.py)

在/vendor/qcom/opensource/tools/linux-ramdump-parser-v2目录下执行:ln -s ../../../proprietary/ramdump-parser extensions

2、Trace使用

a、ramdump解析后,有几个文件

launch_t32.sh t32_config.t32 t32_startup_script.cmm

t32_config.t32
OS= ID=T32_1000002
TMP=/tmp
SYS=/opt/t32
HELP=/opt/t32/pdfPBI=SIMSCREEN= FONT=LARGE
;HEADER=Trace32-ScorpionSimulator
;PRINTER=WINDOWSRCL=NETASSIST
PACKLEN=1024
PORT=22862t32_startup_script.cmm    // 是t32加载的执行脚本,是解析脚本默认生成的title "/mnt/work4t/temp/Qcom/DUMPLOG/out"
sys.cpu CORTEXA53
sys.up
data.load.binary /mnt/work4t/temp/Qcom/DUMPLOG/OCIMEM.BIN 0x14680000
data.load.binary /mnt/work4t/temp/Qcom/DUMPLOG/PIMEM.BIN 0x1c000000
data.load.binary /mnt/work4t/temp/Qcom/DUMPLOG/DDRCS0_0.BIN 0x80000000
data.load.binary /mnt/work4t/temp/Qcom/DUMPLOG/DDRCS0_1.BIN 0x100000000
data.load.binary /mnt/work4t/temp/Qcom/DUMPLOG/DDRCS1_0.BIN 0x180000000
data.load.binary /mnt/work4t/temp/Qcom/DUMPLOG/DDRCS1_1.BIN 0x200000000
Register.Set NS 1
Data.Set SPR:0x30201 %Quad 0xa6d9d000
Data.Set SPR:0x30202 %Quad 0x00000032B5193519
Data.Set SPR:0x30A20 %Quad 0x000000FF440C0400
Data.Set SPR:0x30A30 %Quad 0x0000000000000000
Data.Set SPR:0x30100 %Quad 0x0000000004C5D93D
Register.Set CPSR 0x3C5
MMU.Delete
MMU.SCAN PT 0xFFFFFF8000000000--0xFFFFFFFFFFFFFFFF
mmu.on
mmu.pt.list 0xffffff8000000000
data.load.elf /mnt/work4t/temp/Qcom/DUMPLOG/vmlinux 0x28ae400000 /nocode
task.config /opt/t32/demo/arm64/kernel/linux/linux-3.x/linux3.t32
menu.reprogram /opt/t32/demo/arm64/kernel/linux/linux-3.x/linux.men
task.dtask
v.v  %ASCII %STRING linux_banner

b、安装T32(Ubuntu)

解压后,按readme.txt操作,主要是拷贝到/opt/t32(根据具体情况修改)文件中。

记得修改权限 sudo chmod -R a+x /opt/t32/bin/pc_linux64/*

修改相关路径后,同步确保launch_t32.sh和步骤a中,文件路径一致。

可参考:Trace32 安装 (pc_linux64)_沉思-CSDN博客_trace32 下载

c、确认OK后,执行./launch_t32.sh,即可进入到T32中。

3、涉及一些地址修改的问题总结

a、需要修改物理地址问题

配置文件boards.py (有些平台是在这文件调用真正的配置文件)

eg:439平台class Board439(Board):
def __init__(self, socid):
super(Board439, self).__init__()
self.socid = socid
self.board_num = "sdm439"
self.cpu = 'CORTEXA53'
self.ram_start = 0x80000000
self.smem_addr = 0x6300000
self.phys_offset = 0x80000000      //修改这里
self.imem_start = 0x8600000
self.kaslr_addr = 0x86006d0
self.wdog_addr = 0x8600658
self.imem_file_name = 'OCIMEM.BIN'

b、涉及kaslr功能

hexdump OCIMEM.BIN | grep dead0012800 beef dead 0000 0000 0000 0000 0000 00000023660 a3ac dead a5c1 c02d 4093 5020 a950 a9b0002a6d0 4ead dead 0000 03c0 0014 0000 f7ff ffff002ab10 0000 0000 d00d dead ffff ffff feff fe7f本次kaslr值为 0000 03c0 0014 0000   即0x1403c00000也可以在dmesg.TZ查看:The kaslr_offset extracted is: 0x1403c00000The kimage_voffset extracted is: ffffffd373c00000

4、crash一些相关

a、获取crash工具

去redhat官网下载最新版本的crash源码,当前最新版本是crash-7.2.4.tar.gz

https://people.redhat.com/anderson/

如果想下载老的版本,可以去这里:

Releases · crash-utility/crash · GitHub

下载之后需要解压编译,我选择编译arm64架构的crash工具:

$ tar -xf crash-7.2.4.tar.gz

$ cd crash-7.2.4/

$ make target=arm64

我的PC上大约4分钟就编译完成,生成了crash这个二进制文件。

编译过程中有碰到编译失败的问题,需要先安装一些工具:

sudo apt-get install libaio-dev  libncurses5-dev  zlib1g-dev liblzma-dev  flex bison byacc

b、加载高通ramdump

可以参考这个:KBA-161210230643

大致命令是这样:crash vmlinux DDRCS0.BIN@0x20000000,DDRCS1.BIN@0x80000000 --no_data_debug

其中,DDRCS0.BIN和DDRCS1.BIN后面跟的地址可以从load.cmm文件中获取,当然也可以从dump_info.txt中获取。

如果开启了kaslr功能:

解决方法是添加–kaslr=0x???,像这样

crash vmlinux DDRCS0.BIN@0x80000000,DDRCS1.BIN@0xc0000000 --kaslr=0x0000001403c00000 --no_data_debug

kaslr的具体地址可以从OCIMEM.BIN文件中获取

hexdump OCIMEM.BIN | grep dead0012800 beef dead 0000 0000 0000 0000 0000 00000023660 a3ac dead a5c1 c02d 4093 5020 a950 a9b0002a6d0 4ead dead 0000 03c0 0014 0000 f7ff ffff002ab10 0000 0000 d00d dead ffff ffff feff fe7f本次kaslr值为 0000 03c0 0014 0000   即0x1403c00000也可以在dmesg.TZ查看:The kaslr_offset extracted is: 0x1403c00000

当然,也可以直接使用附件中高通的脚本,运行此脚本的命令为:

./qcom_crash.sh vmlinux load.cmm --no_data_debug

#!/bin/bash
#
# This is a script to parse the load.cmm automatically and use the crash tool
# Used by Qualcomm internal
# Any questions, please contact <jiacangl@qti.qualcomm.com>
#
#export CRASH_HOME=/sdc/crash64_upstream
export CRASH_HOME=/home/ubuntu/bin/crash
export CRASH_EXTENSIONS=$CRASH_HOME/extensions
SYMBOL="$1"
FILENAME="$2"
# Usage function
usage()
{echo -e "Usage: $0 vmlinux load.cmm \n"echo -e " $0 vmlinux load.cmm <--minimal> <--no_data_debug><...>\n"exit
}para="$CRASH_HOME/crash "
blank=" "
comma=","
s=" "
if [ $# -lt 2 ]; thenusage
fiif [[ "$2" != "load.cmm" ]]; thenusage
fiwhile [ "$#" -ge "2" ];dot=$3s=${s}${t}${blank}shift
donepara=${para}${SYMBOL}${blank}
a=0
for i in `cat $FILENAME`
doif [ $a -eq 1 ]thenpara=${para}${i},a=0fistr1=${i:0:4}if test "$str1" = "DDRC"thenpara=${para}${i}@a=1fi
doneaa=$(od -A x -t x -j 0x3f6d0 -N 0x10 OCIMEM.BIN)
bb=$(od -A x -t x -j 0x6d0 -N 0x10 OCIMEM.BIN)
str1=${aa:7:8}
str5=${bb:7:8}
if test "$str1" = "dead4ead"
thenecho "qcom kaslr is enabled(0x3f6d0)"str2=" --kaslr=0x"str3=${aa:16:8}str4=${aa:25:8}s=${str2}${str4}${str3}${s}
elif test "$str5" = "dead4ead"
thenecho "qcom kaslr is enabled(0x6d0)"str2=" --kaslr=0x"str3=${bb:16:8}str4=${bb:25:8}s=${str2}${str4}${str3}${s}
fi
b=${#para}
para=${para:0:(b-1)}
para=${para}${s}
echo $para
#eval $para

Qcom平台,dump解析环境配置相关推荐

  1. openstack官方安装文档的解析--环境配置篇(1)

                      openstack官方安装文档的解析--环境配置篇(1) 1. - # openstack的环境搭建安装版本的一些信息---安装的版本为queens版本,选择该版本 ...

  2. 3 北京超算云计算平台深度学习环境配置笔记

    点击链接https://cloud.blsc.cn/进入网页版或下载客户端,使用北京超级云计算中心账号登陆 环境信息加载总结 #!/bin/bash #加载模块 module load anacond ...

  3. Qcom 平台 LK 阶段配置 I2C

    qcom平台LK 阶段配置IIC 版本号:V 1.0 作者:Leo 目录 目录... 1 前言... 4 1.      确定硬件... 4 2.      LK I2C 函数接口... 5 2.1 ...

  4. python3.6爬虫环境安装要多少内存_Python3爬虫环境配置——解析库安装(附tesserocr安装方法)...

    Python3爬虫环境配置--解析库安装(附tesserocr安装方法) 抓取网页代码后,第二步就是提取信息,为了方便程序设计,这里不采用繁琐的正则提取,利用社区里强大的Python解析库,如lxml ...

  5. windows平台,开发环境变量配置

    1.打开我的电脑--属性--高级--环境变量 JAVA配置环境变量变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 变量名:CLASSPATH 变量值: ...

  6. AgileEAS.NET平台开发实例-开发环境配置

    介绍 从官方网站或者是官方交流群中下载到了AgileEAS.NET的最新的集成化的开发包,然后有了这个条件后,我们就可以进行开发了,当然可能还有一些硬件和软件开发环境 方面的要求了,主要的软硬件环境需 ...

  7. iOS之深入解析多环境配置的实现方案

    一.多 target 形式配置多环境 如下所示,选择工程 TARGETS,新创建一个 targets: 创建完成后,可要发现产生了一个 plist 文件,这个 plist 就是对应新创建的 targe ...

  8. 团队环境搭建:MTK平台,PTK5.1、Supernova编译环境配置

    团队环境搭建:MTK平台,外销TV,PTK5.1.Supernova编译环境配置 文章目录 团队环境搭建:MTK平台,外销TV,PTK5.1.Supernova编译环境配置 一.前言 二.硬件环境要求 ...

  9. Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)

    Jenkins--Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包) 持续集成及Jenkins介绍 软件开发生命周期 什么是持续集成? 持续集 ...

  10. SAR成像处理软件运行环境配置(AGX平台)

    1. AGX简介 本文档重点介绍在AGX开发平台上,部署SAR成像处理相关的软件.AGX的相关信息可以参考下面的文档. AI 助力的大批自主机器 | NVIDIA Jetson AGX Xavier具 ...

最新文章

  1. Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
  2. 智能车竞赛开启了新的一个周期,让我聚焦十六届赛题吧
  3. codevs 1105 过河
  4. xfs支持oracle,让linux内核支持xfs文件系统
  5. 45度做人 90度做事 180度为人 360度处事
  6. java创建response对象_javaweb入门-----request与response的作用
  7. 数据特征处理pca降维-小结
  8. mysql中子查询的概念_Mysql子查询的概念、分类、语法
  9. 微信小程序排名规则大揭秘
  10. JavaScript的语句可以不用分号结尾么?
  11. 蜂窝多边形密度图(GIS可视化)
  12. MAC删除开机自启动程序
  13. 青软实训-锐聘学院-Oracle作业
  14. 蓝带 拱桥 区别_蓝带
  15. 差分隐私若干基本知识点介绍(一)
  16. 用python爬取阳光电影的链接
  17. IDEA在一个窗口创建多个项目
  18. caffe学习笔记2:net forward与backward
  19. linux 光功率 模块_光模块及调整光模块输入光功率的方法
  20. 基于Python读取Excel表格文件数据并转换为字典dict格式

热门文章

  1. 轻量型目标检测算法一次看个够
  2. 在Linux下查询外网IP的几种方法
  3. php ajax data遍历,jquery,ajax_each遍历 ajax 如何倒序插入数据库,jquery,ajax - phpStudy
  4. python批量裁剪图片_python实现图片批量剪切示例
  5. 前向断言/前向预查/正向断言/正向预查(lookahead assertions)
  6. 计算机媒体分类及其特点,多媒体的媒体种类有哪些?试归纳叙述多媒体关键特性以及这些特性之间的关系。...
  7. cad文字宽度因子_CAD怎么设置中输入的文字宽度统一?
  8. Git - 设置签名(Autograph)
  9. [prolog 基础系列] Prolog 的使用以及 Knowledge Base
  10. 重庆ETC学员“食神大赛”