Android11.0 OTA差分包升级失败kDownloadStateInitializationError

文章详细介绍了在AB_OTA升级模式下,如何制作差分包并进行线刷验证升级的过程。在跳过Recovery菜单选择界面直接进入线刷模式时,修改了源码以实现自动选择。在升级过程中遇到kDownloadStateInitializationError错误,分析原因是lk分区的Hash值不匹配,解决方案是替换相应.img文件。最后列举了各种OTA升级失败的错误码及其含义。

AB_OTA升级模式开启条件下(MTK_AB_OTA_UPDATER=y),进行线刷验证OTA升级。

1.制作差分包相关参数说明
 -b 过时的。 
 -k 签名所使用的密钥 
 -i 生成增量OTA包时使用此选项。后面我们会用到这个选项来生成OTA增量包。 
 -w 是否清除userdata分区 
 -n 在升级时是否不检查时间戳,缺省要检查,即缺省情况下只能基于旧版本升级。 
 -e 是否有额外运行的脚本 
 -p 定义脚本用到的一些可执行文件的路径。 
 -s 定义额外运行脚本的路径。 
 -x 定义额外运行的脚本可能用的键值对。 
 -v 执行过程中打印出执行的命令。 
 -h 命令帮助 
 -m 执行过程中生成脚本(updater-script)所需要的格式,目前有两种即amend和edify。对应上两种版本升级时会采用不同的解释器。缺省会同时生成两种格式的脚本。 
2.制作差分包

使用命令制作差分包

 ./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86/ -i ota/v1.zip ota/v2.zip ota/update.zip

差分包原包:
out/target/product/{project}/obj/PACKAGING/target_files_intermediates/{project}-target_files-mp5V4129.zip
整包:
out/target/product/{project}/{project}-ota-mp5V4129.zip

3.跳过Recovery菜单选择界面,直接进入线刷模式
  • 源码:bootable/recovery/recovery.cpp
+int update_complete = 0;
 static Device::BuiltinAction PromptAndWait(Device* device, InstallResult status) {
   
   
   auto ui = device->GetUI();
   bool update_in_progress = (device->GetReason().value_or("") == "update_in_progress");
@@ -395,19 +396,24 @@ static Device::BuiltinAction PromptAndWait(Device* device, InstallResult status)
                   "  Your device may fail to boot if you reboot or power off now." };
     }
 
-    size_t chosen_item = ui->ShowMenu(
-        headers, device->GetMenuItems(), 0, false,
-        std::bind(&Device::HandleMenuKey, device, std::placeholders::_1, std::placeholders::_2));
-    // Handle Interrupt key
-    if (chosen_item == static_cast<size_t>(RecoveryUI::KeyError::INTERRUPTED)) {
   
   
-      return Device::KEY_INTERRUPTED;
-    }
-    // Device-specific code may take some action here. It may return one of the core actions
-    // handled in the switch statement below.
-    Device::BuiltinAction chosen_action =
-        (chosen_item == static_cast<size_t>(RecoveryUI::KeyError::TIMED_OUT))
-            ? Device::REBOOT
-            : device->InvokeMenuItem(chosen_item);
+    Device::BuiltinAction chosen_action = Device::NO_ACTION;
+    if (update_complete &g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值