前言:

开发者手机升级OH5.0.3基线,需要优先保障编译、启动和点屏适配,这里主要针对碰到的启动和点屏问题进行总结。

 

1、开机后无法启动

开机无法启动,表现为设备不断重启,导致hdc无法连接。

分析过程:

首先拉取串口日志

查看日志发现kernel panic,sysrq出现crash捕获,说明有关键进程启动失败,继续查看以上串口日志,发现ServiceReap error critical service crashed foundation 4,说明foundation进程启动失败。

通过查看foundation进程的cfg文件

critical属性字段分别表示:是否为关键进程,失败重启次数,重启间隔。

因为字段一配置为关键进程,所以会被kernel捕获导致出现sysrq triggered crash。将字段一改为0,重新烧录后foundation导致的重启现象消失,可通过hdc连接进入设备。

 

2、验证启动点屏

启动后发现点屏失败,拉取hilog日志进行分析

hilog日志

通过hilog日志分析,render_service 初始化失败,表现为依赖的composer初始化报错。

通过ps命令查看进程信息,composer_host和allocator_host进程未拉起成功,render_service进程存在,但是并未初始化成功,导致foundation进程也未成功拉起。

定位报错信息:[LoadVdiAdapter:104] pointer is null and return ret

上述空指针log是因为下方dlsym获取函数失败

 

空指针问题在于获取动态链接库的RegHotPlugCallback函数失败,继续定位libHandle_句柄关联的动态库

libHandle_加载的是libdisplay_composer_vdi_impl.z.so,搜索display_composer_vdi_impl名组件,发现该组件为device_soc_spreadtrum产品仓下定制的组件。

通过和社区OH5.0.3代码对比,发现RegHotPlugCallback等接口函数进行了全局化实现,提供给hdf侧通过dlopen、dlsym的c函数方式调用:

上述适配后解决了函数空指针问题,启动后还是无法亮屏,继续定位日志发现相关mali库加载失败:

 

基于之前底座升级,在musl下的ld-musl-namespace-aarch64.ini配置文件中acquiescence项增加了动态库查找路径,检查下当前文件:

发现OH5.0.3上新增了systemscence配置项,在该配置项的namespace.default.lib.paths属性中添加上so库查找路径,编译后重新烧录启动,能够成功点屏。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐