

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能

本篇文章主要介绍展讯平台手机开发中的部分重启问题知识点,通过阅读本篇文章,您将收获以下内容:
一、 User 版本 默认开启 sysdump 方法
一、 User 版本 默认开启 sysdump 方法
首先,为什么要这么干?userdebug 版本无法复现,User 版本 可以复现,这样才有此默认开启sysdump的方案。
那么展讯平台user版本默认开启sysdump 方案
修改一下代码device\sprd\xxxx\common\rootdir\root\init.common.rcon post-fs-data 下添加:
// 设置 Ylog 默认开启开关 1 开启,0或不写 关闭
setprop persist.ylog.enabled 1
start ylog
// 设置sysdump 默认开关属性值 开启为true 关闭 falsesetprop debug.sysdump.enabled truesetprop persist.sys.eng.reset 0
在代码中添加后,可以进行一下操作查看是否成功
确认是否开启
sysdump开关*#*#83781#*#*(进入工程模式菜单)->DEBUG&LOG->YLog->Setting->Sysdump Enable (开启sysdump)
确认是否开
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目录
将 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 放置同一目录
将 sysdump 所有文件 追加到一个文件中

将sysdump 所有文件 追加到一个文件中
使用 crash_arm 脚本 联合 vmlinux 解析 sysdump log

使用 crash_arm 脚本 联合 vmlinux 解析sysdump log
使用 Log 命令 将
Crash log追加到指定文件中

使用 log 命令 读取log 到指定文件
查看
log,分析重启的具体原因

重启log举例
四、展讯平台抓取重启 串口log的方案
调高 Kernel log 等级为 7
kernel/arch/arm/boot/dts/<sprd-xx-yourboard>.dts,将bootargs = ""里修改loglevel字段 1 修改为 7loglevel=7, console=ttyS1,115200n8。loglevel 即可。

调高 **Kernel log** 等级为 **7**
将 logcat log 重定向到 串口
修改init.common.rc代码(device/sprd/sharkle/common/rootdir/root/init.common.rc)。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
disabble SElinux
在 init.cpp (/system/core/init/init.cpp)中,让selinux_is_enforcing(void)函数直接返回false,同时注掉selinux_status_from_cmdline()函数。
#if 0static 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 0
if (ALLOW_PERMISSIVE_SELINUX) { return selinux_status_from_cmdline() == SELINUX_ENFORCING;
} return true;#else
return false;#endif}
五、展讯平台判断重启类型
在main.log 中查看
在 main.log 中搜索关键字 bootmode

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

搜索关键字 bootmode
六、展讯平台关闭 sysdump 与watchdog关联
关闭sysdump 与watchdog 关联,防止开启sysdump 后watchdog被默认关闭,导致无法抓取复现到重启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

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!以下两个红包每天都可以领取
1.支付宝搜索 522398497,或扫码支付宝红包海报。
支付宝扫一扫,每天领取大红包
2.微信红包,微信扫一扫即可领取红包
微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我
本文详细介绍了展讯平台手机开发中重启问题的解决策略,包括默认开启Sysdump的方法、抓取Sysdumplog的注意事项、log分析流程、调整Kernel log等级的方案、关闭Sysdump与Watchdog关联等,旨在帮助开发者有效定位并解决重启故障。
667

被折叠的 条评论
为什么被折叠?



