手機重啟問題 Log 抓取方法

2021-09-24 15:46:05 字數 4083 閱讀 5016

一、 user 版本 預設開啟 sysdump 方法

二、插入sd卡 抓取sysdump log

三、 sysdump log 分析

四、展訊平台抓取重啟 串列埠log的方案

五、展訊平台判斷重啟型別

六、展訊平台關閉 sysdump 與watchdog關聯

七、展訊平台手動觸發sysdump 方法

一、 user 版本 預設開啟 sysdump 方法

首先,為什麼要這麼幹?

主要原因是,展訊平台部分重啟問題,同樣的**,userdebug 版本無法復現,user 版本 可以復現,這樣才有此預設開啟sysdump的方案。

那麼展訊平台user版本預設開啟sysdump 方案

修改一下**

device\sprd\***x\common\rootdir\root\init.common.rc

在 on post-fs-data 下新增:

// 設定 ylog 預設開啟開關 1 開啟,0或不寫 關閉

setprop persist.ylog.enabled 1

start ylog

// 設定sysdump 預設開關屬性值 開啟為true  關閉 false

setprop debug.sysdump.enabled true

setprop persist.sys.eng.reset 0

在**中新增後,可以進行一下操作檢視是否成功

確認是否開啟sysdump 開關

*#*#83781#*#* (進入工程模式選單) ->debug&log -> ylog-> setting -> sysdump enable (開啟sysdump)

確認是否開ylog

*#*#83781#*#*(進入工程模式選單)->debug&log -> ylog (開啟ylog)

ylog關閉,sysdump 開關預設開啟

二、插入sd卡 抓取sysdump log

注意事項 一定要 插入4g及以上的sd卡,否則無法抓的重啟的dump log

一定要 插入4g及以上的sd卡,否則無法抓的重啟的dump log

三、 sysdump log 分析

插入sd 卡後,成功dump log資訊如下:

dump log 成功的介面

dump log成功後,我們需要解析 sysdump log,解析過程中需要使用對應版本的 vmlinux (out/target/product/sp9832e_1h10_go/obj/kernel/vmlinux) 以及

crash_arm (vendor/sprd/tools/crash/crash_arm) 解析指令碼來解析dumpcore 檔案。

新建解析dump log目錄

將 vmlinux 、crash_arm、 sysdump log 放置同一目錄

cp out/target/product/sp9832e_1h10_go/obj/kernel/vmlinux  reboot/

cp vendor/sprd/tools/crash/crash_arm reboot/

將 vmlinux crash_arm sysdump log 放置同一目錄

將 sysdump 所有檔案 追加到乙個檔案中

將sysdump 所有檔案 追加到乙個檔案中

使用 crash_arm 指令碼 聯合 vmlinux 解析 sysdump log

使用 crash_arm 指令碼 聯合 vmlinux 解析sysdump log

使用 log 命令 將 crash log追加到指定檔案中

使用 log 命令 讀取log 到指定檔案

檢視log,分析重啟的具體原因

重啟log舉例

6.參考除錯命令

32 位系統除錯命令

./crash_arm -m phys_base=0x80000000 --cpus number2 vmlinux  all 

64 位系統除錯命令

./crash_arm64 vmlinux all -m phys_offset=0x80000000

四、展訊平台抓取重啟 串列埠log的方案

調高 kernel log 等級為 7

修改**路徑如下:

kernel/arch/arm/boot/dts/.dts,將bootargs = ""裡修改loglevel欄位 1 修改為 7 loglevel=7, console=ttys1,115200n8 。

搜尋關鍵字 loglevel 即可。

調高 **kernel log** 等級為 **7**

將 logcat log 重定向到 串列埠

修改init.common.rc**(device/sprd/sharkle/common/rootdir/root/init.common.rc)。

在 init 指令碼中新增 logcat 重定向 service .

+service logcat /system/bin/logcat -f /dev/kmsg *:w

+ class main

+ user root

+ group log

+ oneshot

on boot

chown system system /proc/wcn_gnss/start

chown system system /proc/wcn_gnss/stop

disabble selinux

在 init.cpp (/system/core/init/init.cpp)中,讓selinux_is_enforcing(void)函式直接返回false,同時注掉selinux_status_from_cmdline()函式。

#if 0

static selinux_enforcing_status selinux_status_from_cmdline()

});return status;

}#endif

static bool selinux_is_enforcing(void)

return true;

#else

return false;

#endif

}五、展訊平台判斷重啟型別

在main.log 中檢視

在 main.log 中搜尋關鍵字 bootmode

搜尋關鍵字 bootmode

2.在 phone.info 檔案中檢視

在 ylog ->poweron->aplog 目錄下的phone.info 檔案中 搜尋關鍵字 bootmode

搜尋關鍵字 bootmode

在sysdump中檢視觸發重啟dump的型別

重啟型別資訊儲存檔案路徑

kernel panic 重啟

手動觸發sysdump 重啟

六、展訊平台關閉 sysdump 與watchdog關聯

關閉sysdump 與watchdog關聯,防止開啟sysdump後watchdog被預設關閉,導致無法抓取復現到重啟log的dump。

修改檔案路徑如下:

kernel/drivers/soc/sprd/debug/sysdump/sysdump.c

sysdump_status = 1;

sprd_set_reboot_mode("dumpenable");

set_sysdump_enable(1);

//****************

-           sysdump_enable_watchdog(0);

//*************

} else if (!strncmp(sysdump_buf, "off", 3)) {

pr_emerg("sprd_sysdump_write: disable user version sysdump!!!\n");

sysdump_status = 0;

刪除 sysdump_enable_watchdog

七、展訊平台手動觸發sysdump方法

在kernel未完全死掉時候,觸發swt(優先方案)

手動觸發方案:

同時按住音量+ 、音量- 、然後雙擊power鍵

在kernel完全死掉,觸發hwt

手動觸發方案:

長按power 鍵、 音量+

Log抓取方法

log抓取方法 一 adb log adb logcat b main d adb main.log ddms預設顯示的log adb logcat b radio d adb radio.log 協議相關log adb logcat b events d adb events.log 事件處理 a...

Android手機抓取log日誌

adb.exe adbwinapi.dll adbwinusbapi.dll 這三個檔案即可使用 在pc端解壓縮,得到platform tools latest windows資料夾 此處將此資料夾放在d盤根目錄下 2 手機在開發者模式下,開啟usb除錯功能 看自己具體的手機操作 然後用usb線連線...

Android手機抓取log日誌

adb.exe adbwinapi.dll adbwinusbapi.dll 這三個檔案即可使用 在pc端解壓縮,得到platform tools latest windows資料夾 此處將此資料夾放在d盤根目錄下 2 手機在開發者模式下,開啟usb除錯功能 看自己具體的手機操作 然後用usb線連線...