计算机系统应用教程网站

网站首页 > 技术文章 正文

Android 7 8953平台OTA差分升级

btikc 2024-09-09 01:38:40 技术文章 17 ℃ 0 评论

文档说明

本文档以SC826-CN-01(msm8953平台,Android 7)为例,说明OTA差分升级的过程。

不想看踩坑记录和分析过程的,直接看最后一章 "OTA差分升级"。

踩坑过程

以前搞过OTA整包升级,看了下相关文档,差分升级只是多了一个制作差分包的动作,其他步骤看上去没啥区别。 好像很简单。

相关文档一般描述如下图:

步骤简单明了,操作清晰。

好,照上面步骤操作,先编译了两个版本(旧版本我们称为A版本,新版本称为B版本),并制作了差分包,名为"update.zip",拷贝到本地电脑。

然后准备一个待升级的基础版本:

把A版本通过make otapackage -j8编译出来的out/target/product/msm8953_64下镜像文件,通过QFIL或者fastboot方式烧录到模块。好,我理解这就是我们待升级的基础版本。

再通过adb reboot recovery进入升级界面,选择"Apply update from ADB"。

adb sideload "D:\update.zip"

万事大吉,等待升级成功。。。

what? 升级失败。来,我们看看发生了啥。

提示 E3001: Package expects build fingerprint 。。。。

好啊,我们修改制作差分包所调用到的脚本文件 build/tools/releasetools/edify_generator.py,把上述断言错误注释掉。

重新制作差分包,重新进入recovery界面进行升级。

额,还是失败,类似下图:

现在报错: E1004: system partition fails to recover

换个思路,采用上层APK调用系统升级接口 RecoverySystem.installPackage(),重启后升级,仍然失败。

失败log如下面链接:

https://uploader.shimo.im/f/JwOj2xei60kjxrvc.log?attname=1-A%E5%9B%BA%E4%BB%B6-%E5%BA%94%E7%94%A8-A-to-B-ota%E5%B7%AE%E5%88%86%E5%8C%85-%E5%8D%87%E7%BA%A7%E5%A4%B1%E8%B4%A5.log&download

log就不仔细分析了,也是提示解析system.img block数据失败,本质上和通过adb升级失败的原因一致。

OTA差分升级

现在来讲实际验证可以正常升级的步骤

  1. 编译A版本

make installclean

rm -rf out/target/product/msm8953_64/obj/KERNEL_OBJ

rm -rf out/target/product/msm8953_64/obj/kernel

rm -rf out/target/product/msm8953_64/obj/PACKAGING

source build/envsetup.sh

lunch 1

make dist

  1. 保存A版本文件

第一步A版本编译完成后,会在 out/ 目录下 生成 dist/目录。

把 out/dist/ 整个目录拷贝到本地电脑。

把 out/dist/msm8953_64-target_files-eng.ouyangxp.zip 文件拷贝到 OTA/ 目录下,重命名为old.zip

  1. 烧录A版本固件

把 dist/msm8953_64-img-eng.ouyangxp.zip解压。

再把out/target/product/msm8953_64/下的

persist.img

emmc_appsboot.mbn

mdtp.img

也拷贝出来,放在解压的文件夹内,如下图:

  1. 编译B版本

随便改个boot相关的功能,我修改了msm-pm8953.dtsi文件的设置,重新编译。

make installclean

rm -rf out/target/product/msm8953_64/obj/KERNEL_OBJ

rm -rf out/target/product/msm8953_64/obj/kernel

rm -rf out/target/product/msm8953_64/obj/PACKAGING

source build/envsetup.sh

lunch 1

make dist

  1. 保存B版本文件

B版本编译完成后,把 out/dist/ 整个目录拷贝到本地电脑。

把 out/dist/msm8953_64-target_files-eng.ouyangxp.zip 文件拷贝到 OTA/ 目录下,重命名为new.zip

  1. 制作差分包

./build/tools/releasetools/ota_from_target_files --block -v -p out/host/linux-x86/ -i ./OTA/old.zip ./OTA/new.zip ./OTA/update.zip

注:经验证,这里加不加 -- block,都能升级成功。 加了--block参数,生成的差分包文件要大一些。

  1. 差分升级

adb reboot recovery

选择"Apply update from ADB"。

adb sideload "D:\update.zip"

OK,差分升级成功。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表