Qcom平台,dump解析环境配置

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/bash

echo ""

echo "Start ramdump parser.."

local_path=$PWD

ramdump=$local_path/

vmlinux=$local_path/vmlinux

out=$local_path/out

gdb=/mnt/work/tools/aarch64-linux-android-4.9-linaro/bin/aarch64-elf-linux-android-gdb

nm=~/tools/gnu-tools/aarch64-linux-android-4.9/bin/aarch64-linux-android-nm

objdump=~/tools/gnu-tools/aarch64-linux-android-4.9/bin/aarch64-linux-android-objdump

# git clone git://codeaurora.org/quic/la/platform/vendor/qcom-opensource/tools

ramparse_dir=/media/ubuntu/code/XXXX_dev/vendor/qcom/opensource/tools/linux-ramdump-parser-v2

echo "cd $ramparse_dir"

cd $ramparse_dir

echo ""

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 lagoon

cd $local_path

echo "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/pdf

PBI=SIM

SCREEN= FONT=LARGE
;HEADER=Trace32-ScorpionSimulator
;PRINTER=WINDOWS

RCL=NETASSIST
PACKLEN=1024
PORT=22862


t32_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 dead

0012800 beef dead 0000 0000 0000 0000 0000 0000

0023660 a3ac dead a5c1 c02d 4093 5020 a950 a9b0

002a6d0 4ead dead 0000 03c0 0014 0000 f7ff ffff

002ab10 0000 0000 d00d dead ffff ffff feff fe7f

本次kaslr值为 0000 03c0 0014 0000   即0x1403c00000

也可以在dmesg.TZ查看:

The kaslr_offset extracted is: 0x1403c00000

The 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 dead

0012800 beef dead 0000 0000 0000 0000 0000 0000

0023660 a3ac dead a5c1 c02d 4093 5020 a950 a9b0

002a6d0 4ead dead 0000 03c0 0014 0000 f7ff ffff

002ab10 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 ]; then
	usage
fi

if [[ "$2" != "load.cmm" ]]; then
	usage
fi

while [ "$#" -ge "2" ];do
	t=$3
	s=${s}${t}${blank}
	shift
done

para=${para}${SYMBOL}${blank}
a=0
for i in `cat $FILENAME`
do
	if [ $a -eq 1 ]
	then
	para=${para}${i},
	a=0
	fi

	str1=${i:0:4}
	if test "$str1" = "DDRC"
	then
		para=${para}${i}@
		a=1
	fi
done

aa=$(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"
then
	echo "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"
then
	echo "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


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值