解析dump的幾種方式
在開發除錯過程中,經常會遇到手機/裝置crash或者dump了,memory dump是分析系統crash/dump的重要辦法
在qualcomm的流程中,裝置如果發生dump,會將dump的log快取到某一個區域,使用者可以利用個別工具將log取出來分析,以下就是基本qcom的基礎上介紹幾種獲取dump log的方法:
1.T32方法
trace32 onlie軟體,連結到主機板/裝置上,然後利用JTAG方法能獲取到log,T32的方法適用於qcom和MTK各種平臺,具體方法可以google T32查詢,這裡不重點不在T32的方法
2.利用QPST獲取
手機在dump後,會進入一個特殊的埠模式(diag.9006
然後對應的資料夾會存放到指定的QPST目錄下,預設目錄在:
C:\Program Files\Qualcomm\QPST\....
在QPST中有設定輸出路徑的地方,DUMP LOG. 儲存路徑為 :
點選 Help 選單 第二項 Open Log File Directory ,在彈出的視窗中開啟Sahara 資料夾中 ,其中Port_COMX資料夾記憶體放的就是DUMP LOG, 注意此處 Port_COM號跟之前在QPST Configuration軟體中顯示COM 號要一致。以確保是本次匯出
注意的是:
1.在連結QPST匯出時,請關係其他佔用埠的軟體,例如QDST等等,否則可能會導致QPST無法連線串列埠
2.QPST軟體最好在window下執行,在虛擬機器的window中執行有時候也會發生未知的錯誤連結不到
××××××××
獲取到dump的log後,此時的log是無法直接review的,還需要經過處理,拿到ramdump+vmulinux,放在同一個路徑下
指令碼請下載:linux-ramdump-parser-v2/ramparse.py
以上工具是需要區分32位和64位的,請注意環境
同時在android環境中找到ndk提供的交叉編譯環境:arm-linux-androideabi-gdb和arm-linux-androideabi-nm(也可以在網上下載)
執行以下cmd:
python /data/doc/linux-ramdump-parser-v2/ramparse.py --force-hardware=8916 -v/data/Port_COM49/vmlinux -g /data/p445tf/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gdb -n /data/p445tf/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-nm -a /data/Port_COM49 -o /data/dump8 –x
以上, 紅色部分:ramparse.py指令碼路徑
綠色部分:平臺資訊
淺紫色部分:vmlinux路徑
深紫色部分:交叉編譯環境路徑,目前的路徑就是gcc環境編譯後存放在位置
深黑色部分:dump檔名
以上是為了舉例解釋指令碼用法,最好是新增到~/brasch中,方便快捷
其中-v指定dump檔案對應的帶除錯資訊的核心vmlinux檔案
-g指定對應的gdb工具檔案
-o指定解析檔案的輸出目錄
-x表示所有的debug資訊均輸出
命令執行後會出現如下解析info
!!! Out directory does not exist. Creating...
[1/32] --clock-dump ... 0.873911s
[2/32] --cpr3-info ... 0.135361s
[3/32] --cpr-info ... 1.103903s
[4/32] --cpu-state ... 0.098867s
[5/32] --ddr-compare ... 3.923111s
[6/32] --check-for-watchdog ... 0.011697s
[7/32] --parse-debug-image ...
...
等待大約8分鐘後,會提示解析完成,然後可以開啟分析,dump log全部解析完成
3.利用高通QCAP網站解析
首先,你得有高通賬號!你得有高通賬號!你得有高通賬號!(同時qcom那邊有貴司專案資訊入庫)重要的事情說三遍
QCAP網站:
https://cap.qti.qualcomm.com/default.aspx
進入後是如下介面,介面中儲存著你所有解析過的dump檔案的記錄,甚至可以下載xml下來給高通幫忙分析
那麼要使用這個網頁工具,點選new start analysas,會進入下面的頁面:
按照圖上的資訊填完,carsh log就是dump log的路徑
而build location這選擇contents.xml路徑,該檔案存放在nonhlos/或者amss/下,用於區分modem側各個分割槽的資訊,會依照此檔案分別解析對應log
解析完成後會顯示如下介面:
首頁會有網頁自動幫忙分析的root case,當然解決問題的辦法還需要深入的去檢視其中的詳細log(左側可以分別檢視tz,modem,ap側等各類log和儲存堆疊資訊)
奇怪的是,個別log本地解析會有異常,沒有log吐出,如果有case在qcom幫忙分析的話,qcom會重新要一份這樣的vmlinux,dump file等拿去自己解析(據說他們解析出來檔案是完整的)