recovery升级是显示进度条_从加密DATA分区进行OTA升级

本文档描述了在Android 7设备上,如何在加密的DATA分区下进行OTA升级。通过分析错误,发现需要跳过未找到的socket通信步骤,并参照Android 9的代码进行修改。提供了一个patch来解决此问题,详细步骤包括编译和替换系统文件,最后成功实现在/data分区上进行OTA更新。
摘要由CSDN通过智能技术生成

文档说明

本文档以SS826-CN-00(SDM450平台,Android 7)为例,描述从加密DATA分区进行OTA升级的方法。

问题背景

Android 7默认代码,DATA分区是加密的。

可见以下路径文件:

/device/qcom/msm8953_64/fstab.qcom

上图修改是不对/data分区进行加密。

在不对/data分区加密时,OTA文件如果放在/data文件,可以进行如下命令进行升级:

adb root

adb shell

echo "--update_package=/data/update.zip" > /cache/recovery/command

reboot recovery

但是如果不修改fstab.qcom文件,使用以上命令进行OTA升级,会出现下图错误:

E: failed to mount /data (Invalid argument)

分析过程

那如何在/data分区加密的情况下,把OTA包放在/data分区,实现OTA升级。

一通百度google搜索之后,说/data分区加密的话,需要先把update.zip解密生成block.map

照如下操作:

adb root

adb shell

/system/bin/uncrypt /data/update.zip /cache/recovery/block.map

结果没生成block.map文件。

查看logcat日志,有如下报错:

E uncrypt : failed to open socket "uncrypt": No such file or directory

相关代码在

bootable/recovery/uncrypt/uncrypt.cpp

在还没有开始解密,就报错了。

然后又是一通搜索,说是解密时需要用到socket通信,往下跟踪代码,跟了半天也没搞懂这个socket通信是个啥玩意。

参考了Android 9的这部分代码:

https://uploader.shimo.im/f/1NxYQLpmR9kZXsvK.cpp?attname=uncrypt.cpp&download

Android 9的代码,直接跳过了所谓的socket通信。

好吧, 我依葫芦画瓢,照着修改Android 7相应的位置试试。

修改方法

  1. 合入以下patch , bootable/recovery/uncrypt.cpp

https://uploader.shimo.im/f/MXdMt5v2yoEhOXdX.patch?attname=uncryptt.cpp.patch&download

2. mmm bootable/recovery/uncrypt

3. 编译之后生成 out/target/product/msm8953_64/system/bin/uncrypt 文件

4. 替换系统文件 adb push uncrypt /system/bin/

5. adb shell

/system/bin/uncrypt /data/update.zip /cache/recovery/block.map

echo "--update_package=@/cache/recovery/block.map" > /cache/recovery/command

reboot recovery

上述block.map文件前面一定要加"@"符号,否则系统重启后会出现下图错误(渣图,凑合着看):

E: footer is wrong

系统重启,显示下面画面,说明正在进行OTA升级:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值