展訊平臺手機重啟問題分析指南
共 4635字,需瀏覽 10分鐘
·
2024-04-26 08:02
和你一起終身學習,這里是程序員Android
經(jīng)典好文推薦,通過閱讀本文,您將收獲以下知識點:
一、 User 版本 默認開啟 sysdump 方法
二、插入SD卡 抓取Sysdump log
三、 sysdump log 分析
四、展訊平臺抓取重啟 串口log的方案
五、展訊平臺判斷重啟類型
六、展訊平臺關閉 sysdump 與watchdog關聯(lián)
七、展訊平臺手動觸發(fā)sysdump 方法
一、 User 版本 默認開啟 sysdump 方法
首先,為什么要這么干?
主要原因是,展訊平臺部分重啟問題,同樣的代碼,userdebug 版本無法復現(xiàn),User 版本 可以復現(xiàn),這樣才有此默認開啟sysdump的方案。
1.展訊平臺user版本默認開啟sysdump 方案
修改方案如下:device\sprd\xxxx\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
在代碼中添加后,可以進行一下操作查看是否成功
2.確認是否開啟sysdump
*#*#83781#*#* (進入工程模式菜單) ->DEBUG&LOG -> YLog-> Setting -> Sysdump Enable (開啟sysdump)
3. 確認是否開 Ylog
*#*#83781#*#*(進入工程模式菜單)->DEBUG&LOG -> YLog (開啟ylog)
Ylog關閉,sysdump 開關默認開啟
二、插入SD卡 抓取Sysdump log
1. 注意事項 一定要 插入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目錄
1. 將 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 放置同一目錄
2. 將 sysdump 所有文件 追加到一個文件中
將sysdump 所有文件 追加到一個文件中
3. 使用 crash_arm 腳本 聯(lián)合 vmlinux 解析 sysdump log
使用 crash_arm 腳本 聯(lián)合 vmlinux 解析sysdump log
4. 使用 Log 命令 將 Crash log追加到指定文件中
使用 log 命令 讀取log 到指定文件
5. 查看log,分析重啟的具體原因
重啟log舉例
6.參考調試命令
32 位系統(tǒng)調試命令
./crash_arm -m phys_base=0X80000000 --cpus number2 vmlinux all
64 位系統(tǒng)調試命令
./crash_arm64 vmlinux all -m phys_offset=0x80000000
四、展訊平臺抓取重啟 串口log的方案
1. 調高 Kernel log 等級為 7
修改代碼路徑如下:kernel/arch/arm/boot/dts/<sprd-xx-yourboard>.dts,將bootargs = ""里修改loglevel字段 1 修改為 7 loglevel=7, console=ttyS1,115200n8 。
搜索關鍵字 loglevel 即可。
調高 **Kernel log** 等級為 **7**
2. 將 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
3. disabble SElinux
在 init.cpp (/system/core/init/init.cpp)中,讓selinux_is_enforcing(void)函數(shù)直接返回false,同時注掉selinux_status_from_cmdline()函數(shù)。
#if 0
static selinux_enforcing_status selinux_status_from_cmdline() {
selinux_enforcing_status status = SELINUX_ENFORCING;
import_kernel_cmdline(false, [&](const std::string& key, const std::string& value, bool in_qemu) {
if (key == "androidboot.selinux" && value == "permissive") {
status = SELINUX_PERMISSIVE;
}
});
return status;
}
#endif
static bool selinux_is_enforcing(void)
{
#if 0
if (ALLOW_PERMISSIVE_SELINUX) {
return selinux_status_from_cmdline() == SELINUX_ENFORCING;
}
return true;
#else
return false;
#endif
}
五、展訊平臺判斷重啟類型
1. 在main.log 中查看
在 main.log 中搜索關鍵字 bootmode
搜索關鍵字 bootmode
2.在 phone.info 文件中查看
在 Ylog ->poweron->aplog 目錄下的phone.info 文件中 搜索關鍵字 bootmode
搜索關鍵字 bootmode
3. 在Sysdump中查看觸發(fā)重啟dump的類型
重啟類型信息保存文件路徑
Kernel panic 重啟
手動觸發(fā)sysdump 重啟
六、展訊平臺關閉 sysdump 與watchdog關聯(lián)
關閉sysdump 與watchdog關聯(lián),防止開啟sysdump后watchdog被默認關閉,導致無法抓取復現(xiàn)到重啟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
七、展訊平臺手動觸發(fā)sysdump方法
1. 在Kernel未完全死掉時候,觸發(fā)SWT(優(yōu)先方案)
手動觸發(fā)方案:
同時按住音量+ 、音量- 、然后雙擊Power鍵
2. 在Kernel完全死掉,觸發(fā)HWT
手動觸發(fā)方案:
長按Power 鍵、 音量+
至此,本篇已結束。轉載網(wǎng)絡的文章,小編覺得很優(yōu)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權,懇請聯(lián)系小編刪除。同時感謝您的閱讀,期待您的關注。
