一、 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線連線...