<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          展訊平臺手機重啟問題分析指南

          共 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),防止開啟sysdumpwatchdog被默認關閉,導致無法抓取復現(xiàn)到重啟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

          七、展訊平臺手動觸發(fā)sysdump方法

          1. 在Kernel未完全死掉時候,觸發(fā)SWT(優(yōu)先方案)

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

          2. 在Kernel完全死掉,觸發(fā)HWT

          手動觸發(fā)方案:
          長按Power 鍵、 音量+

          至此,本篇已結束。轉載網(wǎng)絡的文章,小編覺得很優(yōu)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權,懇請聯(lián)系小編刪除。同時感謝您的閱讀,期待您的關注。

          瀏覽 92
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码导航 | 精品亚洲韩国 | 成人爽爽视频 | 无码翔田千里 | 狗爷城中村嫖记 |