展讯平台手机重启问题分析指南

2023-10-31 21:30

本文主要是介绍展讯平台手机重启问题分析指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、 User 版本 默认开启 sysdump 方法
二、插入SD卡 抓取Sysdump log
三、 sysdump log 分析
四、展讯平台抓取重启 串口log的方案
五、展讯平台判断重启类型
六、展讯平台关闭 sysdump 与watchdog关联
七、展讯平台手动触发sysdump 方法

一、 User 版本 默认开启 sysdump 方法

首先,为什么要这么干?
主要原因是,展讯平台部分重启问题,同样的代码,userdebug 版本无法复现,User 版本 可以复现,这样才有此默认开启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 脚本 联合 vmlinux 解析 sysdump log

使用 crash_arm 脚本 联合 vmlinux 解析sysdump log

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

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

5. 查看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**

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+ oneshoton bootchown system system /proc/wcn_gnss/startchown system system /proc/wcn_gnss/stop

3. 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;
}
#endifstatic bool selinux_is_enforcing(void)
{
#if 0if (ALLOW_PERMISSIVE_SELINUX) {return selinux_status_from_cmdline() == SELINUX_ENFORCING;}return true;
#elsereturn false;
#endif
}

五、展讯平台判断重启类型

1. 在main.log 中查看

在 main.log 中搜索关键字 bootmode

搜索关键字 bootmode

2.在 phone.info 文件中查看

在 Ylog ->poweron->aplog 目录下的phone.info 文件中 搜索关键字 bootmode

搜索关键字 bootmode

3. 在Sysdump中查看触发重启dump的类型

重启类型信息保存文件路径

Kernel panic 重启

手动触发sysdump 重启

六、展讯平台关闭 sysdump 与watchdog关联

关闭sysdump 与watchdog关联,防止开启sysdumpwatchdog被默认关闭,导致无法抓取复现到重启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键

2. 在Kernel完全死掉,触发HWT

手动触发方案:
长按Power 键、 音量+

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除。同时感谢您的阅读,期待您的关注。

这篇关于展讯平台手机重启问题分析指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/318236

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir