一般在升级过程,都会提示用户,请勿断电,不管是android的STB,TV还是PHONE,或者是其他的终端设备,升级过程,基本上都可以看到“正在升级,请勿断电”,然后有个进度条,显示升级的进度。

但是从系统安全的角度考虑,如果用户真断电了,我们仍然需要能够从异常掉电的情况中,恢复系统或者继续升级。

我们先理解下recovery的过程,我们升级过程,其实分为两个阶段,升级包校验过程,以及升级包更新过程

2.1 校验过程掉电

在升级包校验过程,是recovery对升级包zip的完整性以及合法性进行校验,不会写入任何数据,此时掉电,系统不受任何影响

2.2 更新升级包过程掉电

更新过程,会从升级包zip中提取数据,写入到flash的分区中,此时如果掉电,可能系统就被写坏了,在第一节中,我们了解了,其实我们是有两个系统的:

Android启动: uboot  -> boot -> system

Recovery启动:uboot -> recovery

也就是我们在recovery中,可以更新android系统需要所有的分区,但是发现有个问题,recovery本身依赖uboot以及recovery分区,那么recovery如果在更新uboot或者recovery分区过程掉电,那么掉电之后recovery是无法正常启动的。

我们分为三种情况讨论:

更新掉电区间

  2.2.1 更新logo boot system等分区过程掉电

此过程,recovery系统仍然OK,我们重新上电之后,可以继续进入recovery系统升级即可。

  2.2.2 更新recovery分区掉电。

Google原生的recovery分区升级是在android中完成的,recovery更新android,android更新recovery,无论何时,都有一个系统正常,保证了系统不会变砖,recovery更新android的流程。

Recovery通过update.zip更新除recovery分区外的所有分区。

Android通过/system/etc/install-recovery.sh 把/system/etc/recovery-resource.dat更新到recovery分区

2.2.3更新uboot掉电

Uboot是我们系统的启动分区。如果损坏就无法启动,目前国内,基本上厂商都是使用的是emmc flash,emmc包含有BOOT0 BOOT1 USER部分的,一般我们会存储三份uboot镜像,这样其实我们,在emmc上面是存储了三份uboot,如果升级掉电,损坏了其中一个,还有两个uboot是可以启动的,所以不用担心,更新uboot掉电导致的无法启动问题。

有些人就有疑问了,如果是nand flash那么就没有BOOT0 BOOT1了,怎么来保证呢,其实道理是相同的,我们可以在nand flash上面存储两份uboot,这样如果损坏了其中一个,还有一个uboot是好的。

目前来看,国内做android设备的厂商,基本上都是使用的emmc,emmc等同于nand +坏块管理模块,所以emmc比nand的价格高一些,但是少了坏块的处理,并且最终都是由消费者买单,所以普遍上厂商都乐于使用emmc存储。

2.3 总结

升级校验过程掉电,不影响系统本身。

升级更新过程掉电,可以保证重新上电之后进入recovery继续升级。对于特殊分区,像uboot分区,我们需要特殊进行备份处理。

2.4 备注

上面讲到的是整包升级掉电,还有一个特殊的升级,就是差分包升级,如果是差分包升级过程掉电呢,还可以继续升级吗?我们在下一节中详解。

android recovery升级过程中掉电处理的更多相关文章

  1. Android Recovery升级原理

    摘要 Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS).也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者 ...

  2. android recovery 升级之USB设备挂载

    Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...

  3. Android Studio使用过程中常见问题及解决方案

    熟悉Android的童鞋应该对Android Studio都不陌生.Android编程有两个常用的开发环境,分别是Android Studio和Eclipse,之前使用比较多的是Eclipse,而现在 ...

  4. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

    最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...

  5. WDCP从php5.2升级到5.3的办法,以及升级过程中iconv错误的处理

    从wdcp官方论坛我们可以找到一个询问升级的帖子,然后管理员在回复中也提供了升级方法: cd /tmp wget -c http://dl.wdlinux.cn:5180/soft/php-5.3.1 ...

  6. Android APP 调试过程中遇到的问题。

    调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Andro ...

  7. recovery 升级过程LED灯闪烁

    Android设备在进入recovery升级的过程,我们在屏幕上面可以看到升级的机器人动画,以及升级的进度显示.这仅限于有屏幕的设备,比如平板PAD,电视TV等,对与没有屏幕的盒子BOX,那么在不接入 ...

  8. 编译recovery及过程中的部分错误解决

    你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章. 1, 安装所需要的包 2, 建立编译的环境,并同步CWM所需的源码,CyanogenMod源 ...

  9. recovery 升级过程执行自定义shell命令

    有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下: 第一: 把我们需要执行的命令,写成一个test.sh脚本,然后在recov ...

随机推荐

  1. C语言判断大小端的几种方法

    在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下. 以后用到了就直接可以用了. 所谓的大小端,大致的解释意思就是: [大端模式] CPU对操作数的存放方 ...

  2. 【2019北京集训3】逻辑 树剖+2-sat

    题目大意:有一颗有$m$个叶子节点的二叉树. 对于叶子节点$i$,$x[i]=(a[i]\ xor\ V_{p[i]})or(b[i]\ xor\ V_{q[i]})$ 对于非叶子节点$i$,$x[i ...

  3. SpringBoot 遇到 com.google.guava » guava 组件运行异常问题修复方案

    环境 Apache Maven : 3.5.4 org.springframework.boot » spring-boot-starter-parent : 2.0.3.RELEASE io.spr ...

  4. 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类

    BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进 ...

  5. 【DB2】Event monitor for locking

    Customer said, they got the following Errors in applications logs Caused by: financing.tools.hub.sha ...

  6. Java工程师学习指南 入门篇

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  7. 树莓派安装vnc server并设置自启动

    在SSH终端输入sudo raspi-config, 这里需要打开几个选项: expand_rootfs – 将根分区扩展到整张SD卡; change_pass – 默认的用户名是pi,密码是rasp ...

  8. 解决Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name) 中文显示乱码

    如果file.Name为中文则乱码.解决办法是方法1:response.setHeader("Content-Disposition", "attachment; fil ...

  9. 一文揭秘定时任务调度框架quartz

    之前写过quartz或者引用过quartz的一些文章,有很多人给我发消息问quartz的相关问题, quartz 报错:java.lang.classNotFoundException quartz源 ...

  10. Jenkins持续集成学习-Windows环境进行.Net开发4

    目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...