赞
踩
极力推荐文章:欢迎收藏
Android 干货分享
本篇文章主要介绍展讯平台手机开发中的部分重启问题知识点,通过阅读本篇文章,您将收获以下内容:
一、 User 版本 默认开启 sysdump 方法
二、插入SD卡 抓取Sysdump log
三、 sysdump log 分析
四、展讯平台抓取重启 串口log的方案
五、展讯平台判断重启类型
六、展讯平台关闭 sysdump 与watchdog关联
七、展讯平台手动触发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
在代码中添加后,可以进行一下操作查看是否成功
sysdump
开关*#*#83781#*#* (进入工程模式菜单)
->DEBUG&LOG
-> YLog
-> Setting
-> Sysdump Enable (开启sysdump)
Ylog
*#*#83781#*#*(进入工程模式菜单)
->DEBUG&LOG
-> YLog (开启ylog)
Ylog关闭,sysdump 开关默认开启
注意事项 一定要 插入4G及以上的SD卡,否则无法抓的重启的dump log
一定要 插入4G及以上的SD卡,否则无法抓的重启的dump 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目录
- 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 所有文件 追加到一个文件中
使用 crash_arm 脚本 联合 vmlinux 解析sysdump log
Crash log
追加到指定文件中使用 log 命令 读取log 到指定文件
log
,分析重启的具体原因重启log举例
32 位系统调试命令
./crash_arm -m phys_base=0X80000000 --cpus number2 vmlinux all
64 位系统调试命令
./crash_arm64 vmlinux all -m phys_offset=0x80000000
修改代码路径如下:kernel/arch/arm/boot/dts/<sprd-xx-yourboard>.dts
,将bootargs = ""
里修改loglevel字段 1 修改为 7 loglevel=7, console=ttyS1,115200n8
。
搜索关键字 loglevel 即可。
调高 **Kernel log** 等级为 **7**
修改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
-
在 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
- }
-
在 main.log
中搜索关键字 bootmode
搜索关键字 bootmode
2.在 phone.info 文件中查看
在 Ylog
->poweron
->aplog
目录下的phone.info 文件中 搜索关键字 bootmode
搜索关键字 bootmode
Sysdump
中查看触发重启dump
的类型重启类型信息保存文件路径
Kernel panic 重启
手动触发sysdump 重启
关闭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
七、展讯平台手动触发sysdump
方法
Kernel
未完全死掉时候,触发SWT(优先方案)手动触发方案:
同时按住音量+ 、音量- 、然后双击Power键
Kernel
完全死掉,触发HWT
手动触发方案:
长按Power 键、 音量+
长按识别二维码,领福利
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。
小礼物走一走,来简书关注我
赞赏支持
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。