我是靠谱客的博主 幸福大炮,最近开发中收集的这篇文章主要介绍[Android9.0][GSI][Qualcomm_SDM845]刷完Google GSI包后无法开机,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【现象】

高通SDM845 Android 9.0项目,刷完Google GSI包(vbmeta.img和system.img)之后无法开机,定在第一帧logo处

【分析】

  • logcat log:每次logcat都block在如下log附近
[    4.710406] c6      1 init: starting service 'vendor.qseecomd'...[    4.710406] c6      1 init: starting service 'vendor.qseecomd'...
[    4.711698] c6      1 init: starting service 'exec 2 (/vendor/bin/init.qti.qseecomd.sh)'...
[    4.712547] c6      1 init: SVC_EXEC pid 622 (uid 1000 gid 1000+0 context default) started; waiting...
[    4.721147] c4      1 init: Service 'vendor.qseecomd' (pid 620) exited with status 1
[    4.721161] c4      1 init: Sending signal 9 to service 'vendor.qseecomd' (pid 620) process group...
  • 通过如上log可知应该是qseecomd服务无法启动,查看device/qcom/sdm845/init.qti.qseecomd.sh
while [ "$registered" != "true" ]
do
    sleep 0.1
    registered="`getprop vendor.sys.listeners.registered`"
done
  • 通过如上代码,vendor.sys.listeners.registerd属性需要被置为true才能退出这个死循环,而此属性会在vendor/qcom/proprietary/securemsm/daemon/qseecomd.c中main函数被设置为true。
  • 为了验证是不是vendor.sys.listeners.registerd属性没有被设置为true导致开不了机,直接通过adb将init.qti.qseecomd.sh删除,再去刷GSI包。(反向思维,先证明跟此有关)
  • 此时开机不在定在第一帧logo处,但是依然还是不能开机,定在Android logo处,而此时logcat依然可以看到qseecomd服务无法启动。
  • 为验证是不是qseecomd服务中某段代码导致的,直接将qseecomd.c中main函数全部注释,复测结果依然定在Android logo处,而此时logcat依然可以看到qseecomd服务无法启动。(反向思维,先证明跟此有关)
  • 通过上轮测试后,感觉qseecomd服务一启动就挂了。说明跟qseecomd内部实现code无关。
  • 分析相关Android.mk和Android.bp文件,看看qseecomd有没有依赖什么静态库之类的,且此库是在system.img中(system/lib64/)
  • 根据如果代码,最终发现会依赖libtzcom库
#vendor/qcom/proprietary/securemsm/daemon/Android.mk
LOCAL_SHARED_LIBRARIES += 
	libtbaseLoader

#vendor/qcom/proprietary/securemsm/tbase/loader/Android.mk
LOCAL_SHARED_LIBRARIES += 
        libcutils 
        libutils 
        libQSEEComAPI 
        liblog 
        libtzcom

#vendor/qcom/proprietary/prebuilt_grease/target/product/sdm845/Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE        := libtzcom
LOCAL_MODULE_CLASS  := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
LOCAL_STRIP_MODULE  := false
LOCAL_MULTILIB      := 64
LOCAL_MODULE_OWNER  := qcom
LOCAL_MODULE_TAGS   := optional
LOCAL_SRC_FILES     := ../../.././target/product/sdm845/system/lib64/libtzcom.so
LOCAL_MODULE_PATH   := $(PRODUCT_OUT)/system/lib64
include $(BUILD_PREBUILT)

【解决】

将libtzcom.so备份到vendor分区中,在项目的device.mk中添加如下代码

PRODUCT_COPY_FILES += 
  out/target/product/$(TARGET_PRODUCT)/system/lib/libtzcom.so:vendor/lib/libtzcom.so 
  out/target/product/$(TARGET_PRODUCT)/system/lib64/libtzcom.so:vendor/lib64/libtzcom.so

 

最后

以上就是幸福大炮为你收集整理的[Android9.0][GSI][Qualcomm_SDM845]刷完Google GSI包后无法开机的全部内容,希望文章能够帮你解决[Android9.0][GSI][Qualcomm_SDM845]刷完Google GSI包后无法开机所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部