高通平台抓ram dump

时间:2024-02-21 11:51:37

高通平台抓ram dump

原文(有删改):https://blog.csdn.net/m0_37166404/article/details/80821600

背景

高通平台下提供了一个工具,专门用来抓取内核死机以后的dump信息。如果只是非系统层面的crash(例如底层应用,安卓程序),则不能抓取dump信息。

在阅读一些文档的时候知道有这个功能,但是一直没时间尝试。

介绍

流程为:

1、进入dump模式:系统需要触发crash, 同时机器需要进行warm reset

2、用QPST工具抓取dump:当进入warm reset的时候,QPST可以开始抓取ram dump了,此时电流应该为82.58mA(固定某个值)

3、使用QCAP进行解析。

注意,不要轻易重新上电,会导致现场丢失而错失调试机会。

触发Crash

这里有三种方法可以触发crash,然后进入warm reset:

手动输入命令

输入以下命令

echo c > /proc/sysrq-trigger

之后按下音量下键,就会主动触发crash 和 warm reset,之后就会抓取到ram dump了

路径: 这里写图片描述

硬件触发法

任何时候,拉低pmic的PS_HOLD引脚不超过200ms,就会触发crash 和 warm reset

错误的驱动

例如:修改驱动代码以及dts。

这个方法还没有验证

在msm-pm660.dtsi中修改

qcom,pon_2 {
        qcom,pon-type = <1>;
        qcom,support-reset = <1>;
        //qcom,pull-up = <1>;  --- 去掉
        qcom,s1-timer = <0>;   --- Specify if this pon type needs to handle bark irq
        qcom,s2-timer = <2000>;  ---- 2ms
        qcom,s2-type = <1>;   --- WARM(1)的type
        //linux,code = <114>; --- 去掉
        qcom,use-bark;
};

之后再按下音量下键两秒

如果是在vddmin状态下抓取的,可能需要在下面的代码中注释掉按键的触发唤醒,否则抓到的就是唤醒的ram dump,而不是vdd min下的ram dump

kernel/msm-3.18/drivers/platform/msm/qpnp-power-on.c

在qpnp_pon_request_irqs中
/* mark the interrupts wakeable if they support linux-key */
 if (cfg->key_code) {
         //enable_irq_wake(cfg->state_irq);--------------注释
         /* special handling for RESIN due to a hardware bug */
         if (cfg->pon_type == PON_RESIN && cfg->support_reset)
                 //enable_irq_wake(cfg->bark_irq);--------注释
                 ;
 }

接下来就是解析抓到的ram dump

解析ram dump

参考文档80-NR964-54SC(中文) 80-NR964-54

使用CrasScope分析:打开网站会提示调到java官网下载java,按提示安装,并重启浏览器。

1、软件产品在aboot.html的Product项。

2、子系统分析选择部分或者全部

3、选择meta build的路径,即modem代码路径或者单独将需要的symbol文件放到dump抓取到的

log文件夹中,symbol文件的查找可参考下来提示。

 -Summary: 
 1) You can check your contexts.xml, such as : 
 <file_ref symbol="modem"> 
 <file_name>M8936FAAAANYZQ*.elf</file_name> 
 <file_path>modem_proc/build/ms/</file_path> 

在modem的contexts.xml文件中,查找sysbol或者elf的字符串对应的文件:

  • 如果机器的代码跟编译的代码 不一致或者查找到的代码不一致,会提示红字体的解析失败。
  • 成功后会生成一份文档
## 附录:Smart平台AT 命令查验dump功能

输入命令,查验死机后是否直接开机而没有进入dump

指令:at+qcfg="dumpenable"

[2021-01-25_14:20:39:547]at+qcfg="dumpenable"

[2021-01-25_14:20:39:578]DumpEnable: 0 

[2021-01-25_14:20:39:578]OK
  • at+qcfg="dumpenable",0 :表示死机后直接开机
  • at+qcfg="dumpenable",1:表示死机后进入dump

全部擦除再刷机,值应是为0