从加密DATA分区进行OTA升级

文档说明

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

 

问题背景

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

可见以下路径文件:

/device/qcom/msm8953_64/fstab.qcom

从加密DATA分区进行OTA升级_第1张图片

 

上图修改是不对/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升级_第2张图片

 

分析过程

那如何在/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

从加密DATA分区进行OTA升级_第3张图片

 

相关代码在

bootable/recovery/uncrypt/uncrypt.cpp

从加密DATA分区进行OTA升级_第4张图片

 

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

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

 

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

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

从加密DATA分区进行OTA升级_第5张图片

 

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

从加密DATA分区进行OTA升级_第6张图片

 

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

从加密DATA分区进行OTA升级_第7张图片

 

石墨文档链接

https://shimo.im/docs/vW3PCGhcGGJgq9Qk/ 

你可能感兴趣的:(Android驱动)