Android FOTA 升级流程
2016-08-18 11:17
429 查看
Android设备的系统升级有两种方式:(1)下载更新包到手机后,手动安装,即所谓“卡刷包”的形式更新;(2) 通过 Over-the-air(OTA)的方式更新系统,简称为FOTA(Firmware Over The Air),FOTA升级有两种方式,一种是Full update,即将整个IMG置于升级包中,然后将升级包直接拷贝到系统;一种是Increamental update,即通过增量式的差分包,只是将系统更新的部分打包,然后以打补丁的形式应用到系统。
在介绍FOTA升级流程之前,先来看看Android系统的分区。一般,Android系统有如下几个分区(不同厂商、设备可能有差异):
/boot: 用于系统启动的分区,主要包括Kernel和ramdisk。主要用于挂载system和其他分区,并加载system分区的代码。没有该分区,手机是无法正常启动的;
ramdisk.img is a small partition image that is mounted read-only by the kernel at boot time. It only contains /init and a few config files. It is used to start init which will mount the rest of the system images properly and run the init procedure. A Ramdisk is a standard Linux feature.
/system:该分区包含了出了 kernel/ramdisk之外的系统应用程序和库文件;正常操作情况下,该分区是只读状态;
/recovery:用于系统升级打补丁,包含了一个完整的Linux操作系统和一个特殊的recovery包。FOTA升级时,下载完更新包后,进入recovery模式,recovery程序会读更新包,然后将各个patch应用到各个分区;
/misc:升级时,recovery用于存储相关信息的小分区
/data:主要包含了用户的数据,如联系人、短信、设置以及安装的应用。清除该分区等同于将手机重置,OTA不会影响该分区;
/cache:用于存放需要经常访问使用的数据和应用组件,访问该分区需要特殊的应用程序权限;OTA升级时下载的升级包就位于该分区;
更新程序下载升级包到 cache 或者 data 分区,并验证升级包的签名证书(证书位于
设备重启至 recovery模式,此时启动的是recovery分区的kernel/system
init进程通过
执行
recovery首先校验升级包的签名是否与
recovery通过FOTA中的脚本解析更新包,然后将修改分别更新到对应的boot/system等分区;在系统分区包含的新文件包含了用于更新recovery分区的内容
系统正常重启:
启动更新后的boot/system 分区
启动时,系统检查当前recovery分区和需要更新的recovery分区(事先保存在
设备通知FOTA服务器升级完成
在介绍FOTA升级流程之前,先来看看Android系统的分区。一般,Android系统有如下几个分区(不同厂商、设备可能有差异):
/boot: 用于系统启动的分区,主要包括Kernel和ramdisk。主要用于挂载system和其他分区,并加载system分区的代码。没有该分区,手机是无法正常启动的;
ramdisk.img is a small partition image that is mounted read-only by the kernel at boot time. It only contains /init and a few config files. It is used to start init which will mount the rest of the system images properly and run the init procedure. A Ramdisk is a standard Linux feature.
/system:该分区包含了出了 kernel/ramdisk之外的系统应用程序和库文件;正常操作情况下,该分区是只读状态;
/recovery:用于系统升级打补丁,包含了一个完整的Linux操作系统和一个特殊的recovery包。FOTA升级时,下载完更新包后,进入recovery模式,recovery程序会读更新包,然后将各个patch应用到各个分区;
/misc:升级时,recovery用于存储相关信息的小分区
/data:主要包含了用户的数据,如联系人、短信、设置以及安装的应用。清除该分区等同于将手机重置,OTA不会影响该分区;
/cache:用于存放需要经常访问使用的数据和应用组件,访问该分区需要特殊的应用程序权限;OTA升级时下载的升级包就位于该分区;
FOTA升级流程
设备定时检查FOTA服务器是否有更新;如有更新,服务其发送消息(包括更新包URL,以及关于该更新包的描述)通知设备更新程序下载升级包到 cache 或者 data 分区,并验证升级包的签名证书(证书位于
/system/etc/security/otacerts.zip),验证通过后,通知用户准备安装
设备重启至 recovery模式,此时启动的是recovery分区的kernel/system
init进程通过
init.rc脚本:
service recovery /sbin/recovery启动 recovery程序
执行
/cache/recovery/command中的脚本命令,将其指向于升级包:
"/sbin/recovery" "--update_package=/cache/fota/update.zip"
recovery首先校验升级包的签名是否与
/res/keys(ramdisk)中的公钥相匹配
recovery通过FOTA中的脚本解析更新包,然后将修改分别更新到对应的boot/system等分区;在系统分区包含的新文件包含了用于更新recovery分区的内容
系统正常重启:
启动更新后的boot/system 分区
启动时,系统检查当前recovery分区和需要更新的recovery分区(事先保存在
/system分区),如果有差异,则更新recovery分区
设备通知FOTA服务器升级完成
参考文献
https://source.android.com/devices/tech/ota/index.html相关文章推荐
- Android FOTA 升级流程
- Android FOTA 升级流程
- android fota升级
- android恢复出厂设置以及系统升级流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- 将Gsensor lis301 driver 升级到 lis331 driver 过程总结,以及android中Gsensor相关流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android Recovery系统分析5----Recovery升级流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- (二)android升级--完整包updater-script脚本语法简介及执行流程
- android恢复出厂设置以及系统升级流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- android恢复出厂设置以及系统升级流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程