我是靠谱客的博主 幸福大炮,最近开发中收集的这篇文章主要介绍[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包后无法开机所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复