OTA升級可以采用adb reboot recovery進入recovery模式下。通過update from adb或者update from SD card.
<1>recovery模式adb命令升級方式
adb sideload <update.zip>執(zhí)行此命令升級,如果失敗餐曼,可以查看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咕娄,但是編譯環(huán)境中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分區(qū)為false,導致編譯時把項目當作不帶虛擬分區(qū)的進行編譯。
android\device\qcom\bengal\BoardConfig.mk文件中定義的BOARD_QTI_DYNAMIC_PARTITIONS_SIZE 計算的不對導致的珊擂。關閉虛擬分區(qū)的宏后編譯驗證圣勒,OTA可以正常升級。
OTA升級后版本號沒變化摧扇,是因為系統(tǒng)沒有正確進入新分區(qū)B系統(tǒng)圣贸,即安裝成功, 進入系統(tǒng)不成功扛稽,分析原因如下:升級的時候沒有選擇bnmeta和dtbo吁峻,只選擇了boot和其他vendor,system image.開機校驗失敗。
在devices/qcom/bengal/BoardConfig.mk文件中加入AB_OTA_PARTITIONS ?= boot vendor dtbo vbmeta? 重新驗證OTA升級就可以進入新系統(tǒng)了用含。
<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
"
手機里執(zhí)行adb shell后執(zhí)行升級命令
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
"
執(zhí)行命令后 出現(xiàn)如下圖片表明升級成功矮慕。重啟手機查看是否能正常進入新系統(tǒng)。