高通平台抓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的字符串對應的文件:
- 如果機器的代碼跟編譯的代碼 不一致或者查找到的代碼不一致,會提示紅字體的解析失敗。
- 成功后會生成一份文檔