文档说明
本文档以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差分升级
现在来讲实际验证可以正常升级的步骤
- 编译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
- 保存A版本文件
第一步A版本编译完成后,会在 out/ 目录下 生成 dist/目录。
把 out/dist/ 整个目录拷贝到本地电脑。
把 out/dist/msm8953_64-target_files-eng.ouyangxp.zip 文件拷贝到 OTA/ 目录下,重命名为old.zip
- 烧录A版本固件
把 dist/msm8953_64-img-eng.ouyangxp.zip解压。
再把out/target/product/msm8953_64/下的
persist.img
emmc_appsboot.mbn
mdtp.img
也拷贝出来,放在解压的文件夹内,如下图:
- 编译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
- 保存B版本文件
B版本编译完成后,把 out/dist/ 整个目录拷贝到本地电脑。
把 out/dist/msm8953_64-target_files-eng.ouyangxp.zip 文件拷贝到 OTA/ 目录下,重命名为new.zip
- 制作差分包
./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参数,生成的差分包文件要大一些。
- 差分升级
adb reboot recovery
选择"Apply update from ADB"。
adb sideload "D:\update.zip"
OK,差分升级成功。
本文暂时没有评论,来添加一个吧(●'◡'●)