一、前提条件

要进行Android系统升级,必须首先进入recovery模式,进入recovery模式的方式有:

1. 通过读取 /cache 分区中文件 /cache/recovery/command 内容进入,当然在重启之前已经向文件 /cache/recovery/command 写入了命令字段
     2. 通过按键操作进入 (G1 通过同时按 HOME 和 挂断键)
    以上两种方式进入都需要 blob的支持

二、基本升级过程

Android 升级分为两种,一种是对系统中单个文件升级,一种是对 mtd 整个分区进行升级,升级包是用 zip 格式压缩的经过签名的压缩文件。升级过程主要流程描述如下:

1. bootloader 发现用户按住升级键或/cache/recovery/command中有对应字段,将 recovery.img 作为 ramdisk 读取到内存。

2. 内核根据 ramdisk 中的 init.rc 执行 recovery 脚本。 Recovery 脚本在 sdcard 中找到升级文件后调用 recovery 程序依次做以下操作:

1) 检查升级文件的数字签名是否可靠。检查签名使用的本地密钥为 /res/keys

2) 如果签名合法则执行提取压缩包中 META-INF/com/google/android/update-binary 文件重命名到 /tmp/update_binary 并执行该文件。

3) update_binary 解析压缩文件中的 META-INF/com/google/android/updater-script 文件并执行。其升级进度通过管道回传给 recovery 程序。升级 / 更新可以直接覆盖目标文件,也可采用二进制补丁形式以减少升级文件的容量,采用的工具为 bsdiff 和 imgdiff 。对于补丁包升级形式,升级数据源可靠性鉴别的依据为 sha1 校验和数据长度比对。具体要求为: 1 升 级包提供的目标文件的 sha1 值和目标文件计算值符合,即目标正确。 2 进行补丁后的文件 sha1 值和长度符合升级包提供的补丁后的目标文件的长度和 sha1 数值,保证结果正确。两项有一项不符合则升级过程停止。为保证第二项操作不损毁最终目标,打补丁的文件会先临时存储到 cache 中,等到结果比对正确才进行实际写入 / 替换目标文件操作。所以此过程要求 cache 目录必须有足够空间能够保存临时文件。

三、recovery.img与boot.img的比较

从上图可知:
   1) recovery.img其实已经是进入了Linux系统。

2) recovery.img为了具有恢复系统的能力,比普通的boot.img目录结构中:
       1、多了/res/images目录,在这个目录下的图片都是恢复时我们看到的背景画面。
       2、多了/sbin/recovery二进制程序,这个就是恢复用的程序。
       3、/sbin/adbd不一样,应该和恢复有关。

3) Android系统中的初始化程序(init)和初始化配置文件(default.prop、init.trout.rc、init.rc、init.goldfish.rc、)都不一样。这就是系统没有进入图形界面而进入了类似文本界面,并可以通过简单的组合键进行恢复的原因。

Android可以通过Recovery模式,实现恢复出厂设置、OTA升级、patch升级及firmware升级。在关机后,同时按下home + power键可以进入recovery模式。
大部分升级(包括刷机)都可以通过一个SD卡中的"updata.zip"文件升级包进行傻瓜式升级(步骤简单的升级)。而这一过程就是在系统进入Recovery模式后,通过升级程序运行升级包中“META-INF/com/google/android/update-script脚本来执行各种不同的自定义升级,脚本中是一组recovery模式下系统能识别的UI控制命令和文件系统操作命令,例如write_raw_image(烧写FLASH分区)、copy_dir(复制目录)等等。

Android系统升级流程相关推荐

  1. 【android系统】android系统升级流程分析(二)---update升级包分析

    接下来我们将通过几篇文章来分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.今天让我先来分析下升级包update.zip. 一 ...

  2. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  3. linux系统导航怎么刷安卓系统升级,自定义Android系统升级流程

    流程# 参考链接### 创建系统升级app### 一.使用AndroidStudio创建系统app. 二.声明权限,具备读写外置存储设备的权限以及重启设备的权限. 三.修改配置文件,添加coreApp ...

  4. Android系统升级全流程

    Android系统升级流程处理 前段时间负责公司项目的系统升级模块开发,在开发过程中,对整个升级流程有个基本的了解,现在此做一个阶段性的总结,方便日后查阅.项目基于高通Android 7.0.1实现, ...

  5. Android系统升级

    [整理]Android-Recovery Mode(recover模式详解) 一.前提条件 要进行Android系统升级,必须首先进入recovery模式,进入recovery模式的方式有: 1. 通 ...

  6. 深入理解 Android 系统升级

    前言 2013年7月至2015年6月在长虹担任Android系统研发工程师,主要负责长虹智能电视升级(OTA升级),研发平台是MST 628 和 MTK 5327等. 摘要 随着Android系统的快 ...

  7. Android系统升级 Recovery模式(02)Recovery升级过程

    该系列文章总纲链接:专题分纲目录 Android系统升级 Recovery模式 本章关键点总结 & 说明: 导图是不断迭代的,这里主要关注➕ recovery升级过程部分即可,主要从 一般升级 ...

  8. Android绘制流程

    一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL. Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...

  9. Android事件流程详解

    Android事件流程详解 网络上有不少博客讲述了android的事件分发机制和处理流程机制,但是看过千遍,总还是觉得有些迷迷糊糊,因此特地抽出一天事件来亲测下,向像我一样的广大入门程序员详细讲述an ...

最新文章

  1. java 获取泛型t的class_阿里巴巴都鼎力推荐的java基础之集合其他内容和泛型3
  2. (译)Web地图设计模式——ArcGIS Server
  3. cgi、fastcgi、php-cgi、php-fpm的关系
  4. 在 Go 语言中 Patch 非导出函数
  5. iomem—I/O映射方式的I/O端口和内存映射方式的I/O端口
  6. JavaSE基础chapter1Homework
  7. 程序员撕开京东 618 大促压测的另一面 | 原力计划
  8. @class与#import
  9. 打印机更换感光鼓单元k_打印机换硒鼓步骤:老司机手把手教你
  10. 关于U盘格式化以后容量突然减少很多的解决办法
  11. Temporal Action Detection with Multi-level Supervision UFA论文阅读笔记
  12. Vue npm install失败报错errno -4058
  13. Java下载Excel时文件名称乱码
  14. 怎样把视频中的一小段制作成 GIF动图
  15. 如何实现 JS 运行时的 Inspector 能力
  16. android手机时钟、闹钟、计时器、秒表app源码
  17. 什么叫ODF、DDF、MDF
  18. tf.gather_nd用法详解
  19. mysql 本日、本周、本月、本年 统计
  20. 智云通CRM:客户说“我随便看看”,如何回应才能促进成交?

热门文章

  1. PMP项目管理—干系人问题
  2. 使用SuperMap iDesktopX如何去掉“耗子尾巴”
  3. 2022 buaa CO P6(Verilog实现流水线CPU(plus))
  4. java简单信息管理_用java写一个简单的学生信息管理系统
  5. 豌豆荚使用到的开源技术
  6. 零基础转行IT互联网岗位月入过万需要多久?
  7. 《计算机网络》——文件传输协议FTP、简单邮件传送协议SMTP、邮局协议POP3、网际报文存取协议IMAP、万维网和HTTP协议、超文本传输协议HTTP
  8. 微型计算机的显卡,来一份白色的信仰,ROG-STRIX-RTX3080-O10G-WHITE显卡深度评测
  9. 微信小程序 通过 ThorUI 框架 实现 选择城市
  10. 叮咚买菜nodejs自动下单脚本,支持邮件强通知和定时任务,支持捡漏和高峰模式