從加密DATA分區進行OTA升級

文檔說明

本文檔以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升級:

 

石墨文檔鏈接

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章