如果你喜欢,聊历史,思哲学,品诗集,赏国学。
那就关注公众号:二校五叔
这个是博主的文学公众号啦
抓取工具:QPST
解析工具:CrasScope
抓取QPST的原理:
系统需要触发crash, 同时机器需要进行warm reset
当进入warm reset的时候,QPST可以开始抓取ram dump了,此时正常的电流为
这里有三种方法可以触发crash,然后进入warm reset:
1.命令方法
输入以下命令
cd /d/regmap/spmi0-00 --------- 有时候是 cd /d/spmi/spmi-0
echo 0x844 > address
echo 0x00 > data
echo 0x845 > address
echo 0x00 > data
echo 0x846 > address
echo 0x01 > data
echo 0x847 > address
echo 0x80 > data
之后按下音量下键,就会主动触发crash 和 warm reset,之后就会抓取到ram dump了
路径:
2.硬件触发法
任何时候,拉低pmic的PS_HOLD引脚,就会触发crash 和 warm reset
3.修改代码和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
使用CrasScope分析:
安装
- type go/crashscope
- click Installation.
- copy Shanghai mirror address.
\dine\tools\installers\crashscope - open the directory in the server.
- click CrashScope
打开CrasScope
输入meta路径,和ram dump路径,output路径,点击run,就可以了