• 摘要

高通平台, 正式版本(shiping image)User版本的时候,需要开启SSR。

作用:在子系统crash的时候,系统不会因为panic问题导致dump黑屏,无法继续运行,导致用户体验差。

目录

1. 代码实战

        1.1 属性配置

        1.2 修改SELinux报错

2. 效果验证

        2.1 从logcat确认代码流程是否正确执行,有无SELinux错误。

        2.2 功能效果验证


#创作灵感#

网络中有一些原创资源是介绍SSR的,为什么我要再造一遍轮子呢?

原因有以下几点:

1. 资料不系统,只能看到理论和debug方法,没有可以落实到入库级别的内容。

2. 脱离具体平台,适用性无法确保。

特别转载,首先支持原创作者。

作者jimbo_lee:

qcom 平台SSR (Subsystem Restart)配置_modem ssr-CSDN博客

部分科普内容可以学习下上面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,是不是很简单~


创作不易,欢迎点赞收藏,欢迎评论交流!

支持原创,从你我做起!

Logo

电影级数字人,免显卡端渲染SDK,十行代码即可调用,工业级demo免费开源下载!

更多推荐