展讯平台手机重启问题分析
本篇文章主要介绍展讯平台手机开发中的部分重启问题知识点,通过阅读本篇文章,您将收获以下内容:
一、 User 版本 默认开启 sysdump 方法
二、插入SD卡 抓取Sysdump log
三、 sysdump log 分析
四、展讯平台抓取重启 串口log的方案
五、展讯平台判断重启类型
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
![](https://img.haomeiwen.com/i5851256/d53a800648e23670.jpg)
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
一、 User 版本 默认开启 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)
- 确认是否开
![](https://img.haomeiwen.com/i5851256/f0e8a487e694ae9a.png)
二、插入SD卡 抓取Sysdump log
注意事项 一定要 插入4G及以上的SD卡,否则无法抓的重启的dump log
![](https://img.haomeiwen.com/i5851256/59009d84be6c58c5.png)
三、 sysdump log 分析
插入SD 卡后,成功dump log
信息如下:
![](https://img.haomeiwen.com/i5851256/9195fb0ea0eec2cb.png)
dump log
成功后,我们需要解析 sysdump log
,解析过程中需要使用对应版本的vmlinux(out/target/product/sp9832e_1h10_go/obj/KERNEL/vmlinux
) 以及 crash_arm (vendor/sprd/tools/crash/crash_arm
) 解析脚本来解析dumpcore
文件。
![](https://img.haomeiwen.com/i5851256/503f503af3eadd16.png)
- 将 vmlinux 、crash_arm、 sysdump log 放置同一目录
-
cp out/target/product/sp9832e_1h10_go/obj/KERNEL/vmlinux reboot/
-
cp vendor/sprd/tools/crash/crash_arm reboot/
![](https://img.haomeiwen.com/i5851256/765865d1ddb38a92.png)
- 将 sysdump 所有文件 追加到一个文件中
![](https://img.haomeiwen.com/i5851256/a836f8a3349dcf2c.png)
- 使用 crash_arm 脚本 联合 vmlinux 解析 sysdump log
![](https://img.haomeiwen.com/i5851256/f1556887925467c0.png)
- 使用 Log 命令 将
Crash log
追加到指定文件中
- 使用 Log 命令 将
![](https://img.haomeiwen.com/i5851256/fca2b8a010cc36c6.png)
- 查看
log
,分析重启的具体原因
- 查看
![](https://img.haomeiwen.com/i5851256/3d5ad8270e397faf.png)
四、展讯平台抓取重启 串口log的方案
- 调高 Kernel log 等级为 7
修改代码路径如下:kernel/arch/arm/boot/dts/<sprd-xx-yourboard>.dts
,将bootargs = ""
里修改loglevel字段 1 修改为 7loglevel=7, console=ttyS1,115200n8
。
搜索关键字 loglevel 即可。
![](https://img.haomeiwen.com/i5851256/403766773bb2d985.png)
- 将 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
- 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;
}
#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 中查看
在 main.log
中搜索关键字 bootmode
![](https://img.haomeiwen.com/i5851256/be4f0eae3f81cacc.png)
2.在 phone.info 文件中查看
在 Ylog
->poweron
->aplog
目录下的phone.info 文件中 搜索关键字 bootmode
![](https://img.haomeiwen.com/i5851256/22d87736e5358f51.png)
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。期待您的关注,
感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
![](https://img.haomeiwen.com/i5851256/d53a800648e23670.jpg)
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
![](https://img.haomeiwen.com/i5851256/5e84a53c45b560d2.gif)
点击阅读原文,获取更多福利
![](https://img.haomeiwen.com/i5851256/4ade7bb7659b1047.gif)