android recovery升级过程中掉电处理
一般在升级过程,都会提示用户,请勿断电,不管是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升级过程中掉电处理的更多相关文章
- Android Recovery升级原理
摘要 Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS).也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者 ...
- android recovery 升级之USB设备挂载
Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...
- Android Studio使用过程中常见问题及解决方案
熟悉Android的童鞋应该对Android Studio都不陌生.Android编程有两个常用的开发环境,分别是Android Studio和Eclipse,之前使用比较多的是Eclipse,而现在 ...
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- WDCP从php5.2升级到5.3的办法,以及升级过程中iconv错误的处理
从wdcp官方论坛我们可以找到一个询问升级的帖子,然后管理员在回复中也提供了升级方法: cd /tmp wget -c http://dl.wdlinux.cn:5180/soft/php-5.3.1 ...
- Android APP 调试过程中遇到的问题。
调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Andro ...
- recovery 升级过程LED灯闪烁
Android设备在进入recovery升级的过程,我们在屏幕上面可以看到升级的机器人动画,以及升级的进度显示.这仅限于有屏幕的设备,比如平板PAD,电视TV等,对与没有屏幕的盒子BOX,那么在不接入 ...
- 编译recovery及过程中的部分错误解决
你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章. 1, 安装所需要的包 2, 建立编译的环境,并同步CWM所需的源码,CyanogenMod源 ...
- recovery 升级过程执行自定义shell命令
有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下: 第一: 把我们需要执行的命令,写成一个test.sh脚本,然后在recov ...
随机推荐
- Data - 关于大数据
历史与趋势 大数据的前世今生:诞生.发展.未来? 如何利用数据赚钱?大数据价值变现的10种商业模式及利弊分析 10大行业大数据应用痛点及解决策略 大数据凉了?不,流式计算浪潮才刚刚开始 概念与定义 关 ...
- GDB查看内存(x 命令)
gdb查看内存命令 首先使用gdb [YourFileName].c进入gdb界面 使用examine命令,字母缩写为x查看内存地址的值.x命令语法 x/[number][format] <ad ...
- matlab中数组的拼接
matlab中,行拼接用逗号“:”,列拼接用分号“,”.示例如下: >> a=[1,2,3,4] 结果: a = 1 2 3 4 >> b=[1;2;3;4] 结果: b = ...
- 树莓派安装vnc server并设置自启动
在SSH终端输入sudo raspi-config, 这里需要打开几个选项: expand_rootfs – 将根分区扩展到整张SD卡; change_pass – 默认的用户名是pi,密码是rasp ...
- 获取C#中方法的执行时间及其代码注入
在优化C#代码或对比某些API的效率时,通常需要测试某个方法的运行时间,可以通过DateTime来统计指定方法的执行时间,也可以使用命名空间System.Diagnostics中封装了高精度计时器Qu ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十一):服务网关(Zuul)
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡 ...
- EntityFramework使用总结(与MVC4.0实现CURD操作)
本篇文介绍一下Entity Framework Code First的简单用法,通过一个学生信息的增删查改来学习Entity Framework的使用及与存储过程的交互.我也是学习Entity Fra ...
- zabbix 自定义监控项简单案例
例如:获取被监控主机的登录用户数 以uptime为例: 输入命令:uptime | awk '{print $6}' 可以获得当前登录用户数(不通终端打印出的位置不同) 1.被监控主机修改zabbi ...
- Java并发编程笔记之CyclicBarrier源码分析
JUC 中 回环屏障 CyclicBarrier 的使用与分析,它也可以实现像 CountDownLatch 一样让一组线程全部到达一个状态后再全部同时执行,但是 CyclicBarrier 可以被复 ...
- ssh的两个小知识
ssh的两个小知识 1. 在ssh客户端启动远程服务器的图形界面程序. 如果你试图在ssh客户端运行远程服务器的一个图形界面程序,比如说执行firefox,此时可能会提示,can not connec ...