Android 4.0 OTA 升级过程概述
分析Recovery流程,可从分析升级包入手。
升级包可由 make otapackage命令生成,由Makefile和打包脚本(Python)配合生成。
生成规则比较复杂,其中包含了签名过程,细节不表,主要关注它的内容。
升级包解压后结构如下:
------- /system/etc/install-recovery.sh ----#!/system/bin/sh log -t recovery "Before sha1.... Simba...."if ! applypatch -c EMMC:/dev/block/mmcblk0p2:4642816:c125924fef5a1351c9041ac9e1d6fd1f9738ff77; then log -t recovery "Installing new recovery image__From Simba..." applypatch EMMC:/dev/block/mmcblk0p1:3870720:aee24fadd281e9e2bd4883ee9962a86fc345dcab EMMC:/dev/block/mmcblk0p2 c125924fef5a1351c9041ac9e1d6fd1f9738ff77 4642816 aee24fadd281e9e2bd4883ee9962a86fc345dcab:/system/recovery-from-boot.pelse log -t recovery "Recovery image already installed__From Simba..."fi-------------------------------------------
执行 make otapackage命令时,编译脚本比较boot.img和recovery.img得出patch文件recovery-from-boot.p。
recovery-from-boot.p也是在recovery模式中updater-script解压到system目录的。
install-recovery.sh脚本就是使用这个patch加上boot分区,更新recovery分区。
应用patch前,install-recovery.sh会计算当前recovery分区的sha1。
若计算结果与脚本中记录的相同(c125924fef5a1351c9041ac9e1d6fd1f9738ff77),说明已经更新过了,不再操作。