手機重啟問題 Log 抓取方法


極力推薦文章:歡迎收藏
Android 干貨分享

閱讀五分鍾,每日十點,和您一起終身學習,這里是程序員Android

本篇文章主要介紹展訊平台手機開發中的部分重啟問題知識點,通過閱讀本篇文章,您將收獲以下內容:

一、 User 版本 默認開啟 sysdump 方法
二、插入SD卡 抓取Sysdump log
三、 sysdump log 分析
四、展訊平台抓取重啟 串口log的方案
五、展訊平台判斷重啟類型
六、展訊平台關閉 sysdump 與watchdog關聯
七、展訊平台手動觸發sysdump 方法

一、 User 版本 默認開啟 sysdump 方法

首先,為什么要這么干?
主要原因是,展訊平台部分重啟問題,同樣的代碼,userdebug 版本無法復現,User 版本 可以復現,這樣才有此默認開啟sysdump的方案。

那么展訊平台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

在代碼中添加后,可以進行一下操作查看是否成功

    1. 確認是否開啟 sysdump 開關

*#*#83781#*#* (進入工程模式菜單) -> DEBUG&LOG -> YLog -> Setting -> Sysdump Enable (開啟sysdump)

    1. 確認是否開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目錄

    1. vmlinuxcrash_armsysdump 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 放置同一目錄

    1. sysdump 所有文件 追加到一個文件中

將sysdump 所有文件 追加到一個文件中

    1. 使用 crash_arm 腳本 聯合 vmlinux 解析 sysdump log

使用 crash_arm 腳本 聯合 vmlinux 解析sysdump log

    1. 使用 Log 命令 將 Crash log追加到指定文件中

使用 log 命令  讀取log 到指定文件

    1. 查看log,分析重啟的具體原因

重啟log舉例

  • 6.參考調試命令

32 位系統調試命令

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

64 位系統調試命令

./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

  1. 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

  1. 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() {
    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

  1. Sysdump 中查看觸發重啟dump的類型

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

Kernel panic  重啟

手動觸發sysdump 重啟

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

關閉sysdumpwatchdog 關聯,防止開啟sysdump watchdog被默認關閉,導致無法抓取復現到重啟logdump

修改文件路徑如下:
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 方法

    1. Kernel 未完全死掉時候,觸發SWT(優先方案)

手動觸發方案:
同時按住音量+ 、音量- 、然后雙擊Power鍵

    1. Kernel 完全死掉,觸發HWT

手動觸發方案:
長按Power 鍵、 音量+

至此,本篇已結束,如有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!

微信關注公眾號:  程序員Android,領福利


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM