Android 手机重启问题解决方案

本篇文章主要介绍展讯平台手机开发中的部分重启问题知识点,通过阅读本篇文章,您将收获以下内容:

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

欢迎关注微信公众号:程序员Android

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。

一、 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

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

  1. 确认是否开启sysdump 开关*#*#83781#*#* (进入工程模式菜单)->DEBUG&LOG -> YLog-> Setting -> Sysdump Enable (开启sysdump)

  1. 确认是否开Ylog*#*#83781#*#* (进入工程模式菜单)->DEBUG&LOG -> YLog (开启ylog)

640?wx_fmt=png

Ylog关闭,sysdump 开关默认开启

二、插入SD卡 抓取Sysdump log

注意事项 一定要 插入4G及以上的SD卡,否则无法抓的重启的dump log

640?wx_fmt=jpeg

一定要 插入4G及以上的SD卡,否则无法抓的重启的dump log

三、 sysdump log 分析

插入SD 卡后,成功dump log信息如下:

640?wx_fmt=jpeg

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 文件。

640?wx_fmt=png

新建解析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/

640?wx_fmt=jpeg

将 vmlinux crash_arm sysdump log 放置同一目录

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

640?wx_fmt=jpeg

将sysdump 所有文件 追加到一个文件中

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

  1. 查看log,分析重启的具体原因

640?wx_fmt=png

重启log举例

四、展讯平台抓取重启 串口log的方案

  1. 调高 Kernel log 等级为 7kernel/arch/arm/boot/dts/<sprd-xx-yourboard>.dts,将bootargs = ""里修改loglevel字段 1 修改为 7 loglevel=7, console=ttyS1,115200n8 。loglevel 即可。

640?wx_fmt=png

调高 **Kernel log** 等级为 **7**

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

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

  1. 在main.log 中查看

在 main.log 中搜索关键字 bootmode

640?wx_fmt=jpeg

搜索关键字 bootmode

2.在 phone.info 文件中查看

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

640?wx_fmt=png

搜索关键字 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;

640?wx_fmt=png

删除 sysdump_enable_watchdog

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

如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。

欢迎关注微信公众号:程序员Android

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。

640?wx_fmt=gif

点击阅读原文,获取更多福利

640?wx_fmt=gif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值