1. 程式人生 > >解析dump的幾種方式

解析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

 Port),手機此時並不是處於關機/待機狀態,這時候開啟QPST Configuration,手機會自動抓取dump log並匯出。同時,可以在phone狀態列發現,手機處於sahara memory dump的狀態下。如下:


然後對應的資料夾會存放到指定的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

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

以上工具是需要區分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等拿去自己解析(據說他們解析出來檔案是完整的)