展訊平臺(tái)手機(jī)重啟問(wèn)題分析指南

和你一起終身學(xué)習(xí),這里是程序員Android
經(jīng)典好文推薦,通過(guò)閱讀本文,您將收獲以下知識(shí)點(diǎn):
一、 User 版本 默認(rèn)開啟 sysdump 方法
二、插入SD卡 抓取Sysdump log
三、 sysdump log 分析
四、展訊平臺(tái)抓取重啟 串口log的方案
五、展訊平臺(tái)判斷重啟類型
六、展訊平臺(tái)關(guān)閉 sysdump 與watchdog關(guān)聯(lián)
七、展訊平臺(tái)手動(dòng)觸發(fā)sysdump 方法
一、 User 版本 默認(rèn)開啟 sysdump 方法
首先,為什么要這么干?
主要原因是,展訊平臺(tái)部分重啟問(wèn)題,同樣的代碼,userdebug?版本無(wú)法復(fù)現(xiàn),User?版本 可以復(fù)現(xiàn),這樣才有此默認(rèn)開啟sysdump的方案。
1.展訊平臺(tái)user版本默認(rèn)開啟sysdump?方案
修改方案如下:device\sprd\xxxx\common\rootdir\root\init.common.rc
在?on post-fs-data?下添加:
// 設(shè)置 Ylog 默認(rèn)開啟開關(guān) 1 開啟,0或不寫 關(guān)閉
setprop persist.ylog.enabled 1
start ylog
// 設(shè)置sysdump 默認(rèn)開關(guān)屬性值 開啟為true 關(guān)閉 false
setprop debug.sysdump.enabled true
setprop persist.sys.eng.reset 0
在代碼中添加后,可以進(jìn)行一下操作查看是否成功
2.確認(rèn)是否開啟sysdump
*#*#83781#*#* (進(jìn)入工程模式菜單)?->DEBUG&LOG?->?YLog->?Setting?->?Sysdump Enable (開啟sysdump)
3. 確認(rèn)是否開 Ylog
*#*#83781#*#*(進(jìn)入工程模式菜單)->DEBUG&LOG?->?YLog (開啟ylog)

Ylog關(guān)閉,sysdump 開關(guān)默認(rèn)開啟
二、插入SD卡 抓取Sysdump log
1. 注意事項(xiàng) 一定要 插入4G及以上的SD卡,否則無(wú)法抓的重啟的dump log

一定要 插入4G及以上的SD卡,否則無(wú)法抓的重啟的dump log
三、 sysdump log 分析
插入SD 卡后,成功dump log信息如下:

dump log 成功的界面
dump log成功后,我們需要解析?sysdump log,解析過(guò)程中需要使用對(duì)應(yīng)版本的?vmlinux(out/target/product/sp9832e_1h10_go/obj/KERNEL/vmlinux) 以及
crash_arm?(vendor/sprd/tools/crash/crash_arm) 解析腳本來(lái)解析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?所有文件 追加到一個(gè)文件中

將sysdump 所有文件 追加到一個(gè)文件中
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.參考調(diào)試命令
32 位系統(tǒng)調(diào)試命令
./crash_arm -m phys_base=0X80000000 --cpus number2 vmlinux all
64 位系統(tǒng)調(diào)試命令
./crash_arm64 vmlinux all -m phys_offset=0x80000000
四、展訊平臺(tái)抓取重啟 串口log的方案
1. 調(diào)高?Kernel log?等級(jí)為?7
修改代碼路徑如下:kernel/arch/arm/boot/dts/,將bootargs = ""里修改loglevel字段?1?修改為?7?loglevel=7, console=ttyS1,115200n8?。
搜索關(guān)鍵字?loglevel?即可。

調(diào)高 **Kernel log** 等級(jí)為 **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,同時(shí)注掉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
}
五、展訊平臺(tái)判斷重啟類型
1. 在main.log?中查看
在?main.log?中搜索關(guān)鍵字?bootmode

搜索關(guān)鍵字 bootmode
2.在?phone.info?文件中查看
在?Ylog?->poweron->aplog?目錄下的phone.info?文件中 搜索關(guān)鍵字?bootmode

搜索關(guān)鍵字 bootmode
3. 在Sysdump中查看觸發(fā)重啟dump的類型

重啟類型信息保存文件路徑

Kernel panic 重啟

手動(dòng)觸發(fā)sysdump 重啟
六、展訊平臺(tái)關(guān)閉 sysdump 與watchdog關(guān)聯(lián)
關(guān)閉sysdump?與watchdog關(guān)聯(lián),防止開啟sysdump后watchdog被默認(rèn)關(guān)閉,導(dǎo)致無(wú)法抓取復(fù)現(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
七、展訊平臺(tái)手動(dòng)觸發(fā)sysdump方法
1. 在Kernel未完全死掉時(shí)候,觸發(fā)SWT(優(yōu)先方案)
手動(dòng)觸發(fā)方案:
同時(shí)按住音量+ 、音量- 、然后雙擊Power鍵
2. 在Kernel完全死掉,觸發(fā)HWT
手動(dòng)觸發(fā)方案:
長(zhǎng)按Power 鍵、 音量+
至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺(jué)得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請(qǐng)聯(lián)系小編刪除。同時(shí)感謝您的閱讀,期待您的關(guān)注。
