高通平台User Configuration之SSR(Subsystem Restart)(量产经验)
高通平台, 正式版本(shiping image)User版本的时候,需要开启SSR。作用:在子系统crash的时候,系统不会因为panic问题导致dump黑屏,无法继续运行,导致用户体验差。#创作灵感#网络中有一些原创资源是介绍SSR的,为什么我要再造一遍轮子呢?原因有以下几点:1. 资料不系统,只能看到理论和debug方法,没有可以落实到入库级别的内容。2. 脱离具体平台,适用性无法确保。特别
- 摘要
高通平台, 正式版本(shiping image)User版本的时候,需要开启SSR。
作用:在子系统crash的时候,系统不会因为panic问题导致dump黑屏,无法继续运行,导致用户体验差。
目录
#创作灵感#
网络中有一些原创资源是介绍SSR的,为什么我要再造一遍轮子呢?
原因有以下几点:
1. 资料不系统,只能看到理论和debug方法,没有可以落实到入库级别的内容。
2. 脱离具体平台,适用性无法确保。
特别转载,首先支持原创作者。
作者jimbo_lee:
部分科普内容可以学习下上面jimbo_lee的文章,这里就不重复总结了,下面让我们进行实战吧。
1. 代码实战
代码修改主要为如下两个部分:
| 属性值 |
persist.vendor.sys.ssr.enable_ramdumps 0 persist.vendor.ssr.restart_level=ALL_ENABLE |
| SELinux |
persist.vendor.ssr.restart_level权限: allow vendor_ssr_setup sysfs:file { write open }; allow vendor_init vendor_ssr_prop:property_service set; persist.vendor.sys.ssr.enable_ramdumps权限: persist.vendor.sys.ssr.enable_ramdumps u:object_r:vendor_prop_new:s0 exact int type vendor_prop_new, property_type, mlstrustedobject; allow vendor_init vendor_prop_new:property_service set; |
1.1 属性配置
- 路径:项目/o-common/platform/vendor/产品名称/产品名.mk
目的是将subsystem节点,/sys/bus/msm_subsys/devices/subsys0/restart_level属性值从SYSTEM修改为RELATED
# Enable ssr for user build
ifeq ($(TARGET_BUILD_VARIANT),user)
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += persist.vendor.ssr.restart_level=ALL_ENABLE
endif
- 路径:rootdir/etc/init.qcom.rc
目的是disable ramdump
on property:ro.build.type=user
setprop persist.vendor.sys.ssr.enable_ramdumps 0
1.2 修改SELinux报错
- setprop persist.vendor.sys.ssr.enable_ramdumps权限报错:

- setprop persist.vendor.ssr.restart_level ALL_ENABLE权限报



2. 效果验证
需要编译User版本确认SSR功能是否生效,默认userdebug版本不生效。
2.1 从logcat确认代码流程是否正确执行,有无SELinux错误。
重启设备,执行adb logcat | grep -inr ssr
从下面的log可以看出,SSR流程执行下去了,没有明显报错。

2.2 功能效果验证
注意:
User版本默认是无法使用QXDM工具,触发Modem crash的,这部分需要使用特殊版本。
需要使能User版本的root和remount功能。(后续针对这部分会分享一篇文章)
使用Modem子系统进行验证,使用QXDM工具,发送Modem crash指令:send_data 75 37 03 00
如果执行后,设备没有dump黑屏的话,大概率SSR是生效了,我们再继续查看dmesg的log,看下subsystem是否重启了。
从下面的log看,modem发生了fatal error,进而crash。同时restart_level = RELATED

以下log说明,modem subsystem重新启动了,系统没有ramdump和黑屏,SSR生效啦!!!

注意:
分享一个调试技巧,如果短时间搞不定User版本进行验证,我们可以使用Userdebug版本验证基本动作,如果userdebug版本SSR功能正常的话,加上logcat里面ssr流程没有问题,基本上User版本的SSR也是生效的。
如何用userdebug验证,很简单,修改如下:
在1.1 属性配置章节中,修改build type判断,将user修改为userdebug,是不是很简单~
创作不易,欢迎点赞收藏,欢迎评论交流!
支持原创,从你我做起!
更多推荐


所有评论(0)