OTA升级可以采用adb reboot recovery进入recovery模式下。通过update from adb或者update from SD card.
<1>recovery模式adb命令升级方式
adb sideload <update.zip>执行此命令升级,如果失败,可以查看recovery log,查看失败原因并进一步分析。
SM6115源码采用此方式OTA升级失败,需要修改源码,失败原因参考文档kba-201025055508_1_how_to_fix_the_errors_when_build_and_do_ota_update_if_logic_partition_in_super_bigger_than_4gb_on_android_r.pdf
源码失败原因为device/qcom/bengal.mk 文件中ENABLE_VIRTUAL_AB定义为true,但是编译环境中android/vendor/qcom/opensource/core-utils/build/build.sh 文件中
Cross Reference: /LA.UM.9.15/LINUX/android/vendor/qcom/opensource/core-utils/build/build.sh
VIRTUAL_AB_ENABLED_TARGET_LIST=("kona" "lito" "taro" "lahaina") 重新定义虚拟AB分区为false,导致编译时把项目当作不带虚拟分区的进行编译。
android\device\qcom\bengal\BoardConfig.mk文件中定义的BOARD_QTI_DYNAMIC_PARTITIONS_SIZE 计算的不对导致的。关闭虚拟分区的宏后编译验证,OTA可以正常升级。
OTA升级后版本号没变化,是因为系统没有正确进入新分区B系统,即安装成功, 进入系统不成功,分析原因如下:升级的时候没有选择bnmeta和dtbo,只选择了boot和其他vendor,system image.开机校验失败。
在devices/qcom/bengal/BoardConfig.mk文件中加入AB_OTA_PARTITIONS ?= boot vendor dtbo vbmeta 重新验证OTA升级就可以进入新系统了。
<2>update_engine 开机升级方式
升级包push到手机里
adb root
adb push merged-qssi_bengal-ota.zip /data/ota_package/update.zip
adb enable-verity
adb reboot
Linux服务器上生成升级命令
LA.UM.9.15/LINUX/android/out/dist$ python ota.py merged-qssi_bengal-ota.zip
update_engine_client --update --follow --payload=file:///data/ota_package/update.zip --offset=9024 --size=555263132 --headers="FILE_HASH=ehTLHE5EHwyByVLXlITchOp5ovvZMHegBUW93URHu0o=
FILE_SIZE=555263132
METADATA_HASH=WGPzaLdNNPokah5alH0PvuEi4FU7VyluTAlcnH9zpJI=
METADATA_SIZE=101206
"
手机里执行adb shell后执行升级命令
update_engine_client --update --follow --payload=file:///data/ota_package/update.zip --offset=9024 --size=555263132 --headers="FILE_HASH=ehTLHE5EHwyByVLXlITchOp5ovvZMHegBUW93URHu0o=
FILE_SIZE=555263132
METADATA_HASH=WGPzaLdNNPokah5alH0PvuEi4FU7VyluTAlcnH9zpJI=
METADATA_SIZE=101206
"
执行命令后 出现如下图片表明升级成功。重启手机查看是否能正常进入新系统。