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

【现象】

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

【分析】

  • logcat log:每次logcat都block在如下log附近
复制代码
1
2
3
4
5
[ 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
复制代码
1
2
3
4
5
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库
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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中添加如下代码

复制代码
1
2
3
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部