技术标签: android启动的三种方式 启动方式 recovery模式
转载自:http://blog.chinaunix.net/uid-22028566-id-3533851.html
以下的篇幅开始分析我们在上两个篇幅中生成的update.zip包在具体更新中所经过的过程,并根据源码分析每一部分的工作原理。
1. 通过上一个文档,我们知道了怎样制作一个update.zip升级包用于升级系统。Android在升级系统时获得update.zip包的方式有两种。一种是离线升级,即手动拷贝升级包到SD卡(或NAND)中,通过settings-->About phone-->System Update-->选择从SD卡升级。另一种是在线升级,即OTA Install(over the air)。用户通过在线下载升级包到本地,然后更新。这种方式下的update.zip包一般被下载到系统的/CACHE分区下。
2. 无论将升级包放在什么位置,在使用update.zip更新时都会重启并进入Recovery模式,然后启动recovery服务(/sbin/recovery)来安装我们的update.zip包。
3. 为此,我们必须了解Recovery模式的工作原理以及Android系统重启时怎样进入Recovery工作模式而不是其他模式(如正常模式)。
首先我们要了解Android系统启动后可能会进入的几种工作模式。先看下图:

由上图可知Android系统启动后可能进入的模式有以下几种:
即用户在启动后通过按下组合键,进入不同的工作模式,具体有两种:
① camera + power:若用户在启动刚开始按了camera+power组合键则会进入bootloader模式,并可进一步进入fastboot(快速刷机模式)。
② home + power :若用户在启动刚开始按了home+power组合键,系统会直接进入Recovery模式。以这种方式进入Recovery模式时系统会进入一个简单的UI(使用了minui)界面,用来提示用户进一步操作。在tcc8800开发板中提供了一下几种选项操作:
“reboot system now”
“apply update from sdcard”
“wipe data/factory reset”
“wipe cache partition”
若启动过程中用户没有按下任何组合键,bootloader会读取位于MISC分区的启动控制信息块BCB(Bootloader Control Block)。它是一个结构体,存放着启动命令command。根据不同的命令,系统又 可以进入三种不同的启动模式。我们先看一下这个结构体的定义。
struct bootloader_message{
char command[32]; //存放不同的启动命令
char status[32]; //update-radio或update-hboot完成存放执行结果
char recovery[1024]; //存放/cache/recovery/command中的命令
};
我们先看command可能的值,其他的在后文具体分析。command可能的值有两种,与值为空(即没有命令)一起区分三种启动模式。
①command=="boot-recovery"时,系统会进入Recovery模式。Recovery服务会具体根据/cache/recovery/command中的命令执行相应的操作(例如,升级update.zip或擦除cache,data等)。
②command=="update-radia"或"update-hboot"时,系统会进入更新firmware(更新bootloader),具体由bootloader完成。
③command为空时,即没有任何命令,系统会进入正常的启动,最后进入主系统(main system)。这种是最通常的启动流程。
Android系统不同的启动模式的进入是在不同的情形下触发的,我们从SD卡中升级我们的update.zip时会进入Recovery模式是其中一种,其他的比如:系统崩溃,或则在命令行输入启动命令式也会进入Recovery或其他的启动模式。
为了解我们的update.zip包具体是怎样在Recovery模式中更新完成,并重启到主系统的,我们还要分析Android中Recovery模式的工作原理。下一篇幅开始看具体的Recovery模式工作原理,以及其在更新中的重要作用。
来源:http://blog.chinaunix.net/uid-22028566-id-3533851.html
mvp需要实现太多的接口,单以google官方demo来看实现简单而且稳定的功能,已经需要抽出太多的接口,后续如果ui规则变化,就需要太多的人力来维护 先放一张google官方demo uml类图 可见view跟presenter之间的交互很复杂 mvvm模式可以pv之间的接口大大简化 没有一种放之四海皆准的设计模式但应该遵循最基本的原则 •  ...
什么是OTA升级? OTA是Over-the-Air的简称,OTA升级可以理解为用户正常使用过程中进行升级,OTA 升级旨在升级基础操作系统、系统分区上安装的只读应用和/或时区规则。 什么是Android AB系统更新 A/B 系统升级,也叫做无缝更新,A/B系统升级,顾名思义是有两个系统,在磁盘上开辟两个存储空间A/B存储空间,在升级过程中保证有一个可以正常运行的系统,采用这种方式可以大大提升更...
一、准备工作 1、项目结构 2、布局文件(activity_main.xml) 二、效果 三、三种实现方式 1、(方式一)在与事件绑定时定义事件监听器 该方法是当通过调用组件的setXXXListener()方法设置监听器时,定义只能当前的组件使用的事件监听器,代码如下 【提示】Button btnClick = ...
<整理自网络> 一、背景色渐变 背景色渐变可以通过在res/drawable中定义一个XML文件实现,gradient.xml的代码如下: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/ap...
01.01_XML简介 [1]什么是XMl XML 指[可扩展][标记语言](EXtensible Markup Language) XML 是一种标记语言,很...
android应用中常用的加密方式有三种:MD5,AES,RSA。在进行实际的开发过程中,一般是几种加密方式配合使用,这样加密效果会更好,被**的概率会越小。下面我们就分别讲一下三种加密方式的实现过程。 一、MD5 MD5本质是一种散列函数,用以提供消息的完整性保护。 特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的; 2.容易计算:从原数据计算出MD5值很容易; 3.抗修改性:对...
1.安装XAMPP,下载链接(https://www.apachefriends.org/index.html) 1.1选择winds10版本 2.安装XAMPP 2.1下载完毕后打开安装包安装一路确定有勾打勾,最后安装完毕 2.2安装完毕之后软件会跳出选择语言,选英语即可,然后会自动运行该软件,界面如下图所示(重启之后) 2.3打开界面之后会看到Modul列里有个apache服务,点击start...
lstm的模型图如下 其中xt为当前时刻的输入,ct-1为上一个时刻的记忆,ht-1为上一个时刻的输出 分为输入门,遗忘门,输出门,三个门来实现 1.遗忘门: 遗忘门是用来计算上一时刻的记忆保存多少,计算方式为ft=sigmoid(Wf*[ht-1,xt]+bf),这个计算出是一个0,1之间的数字 2.输入门: 输入门是用来计算当前状态的记忆,计算方式为 it = sigmoid(Wi*[ht-1...
前言 实际开发以来,总是觉得自己的代码不够优雅,但是往往学习的对象只单纯是同组/前人的代码以及自己的惯用编程习惯,后续发现阿里有出《Java开发手册》,便下了华山版进行学习并记录。学习完后上阿里云官网发现后续出了泰山版和嵩山版,进行简单对比后补充。 但是第一次用印象笔记,直接复制过来格式有很大的问题,所以给的个人网盘链接,有需要的可以下载,有一些方面自己不是很了解看也看不太懂就没写在里面,欢迎指正...
EasyPlayer作为业界一款比较优秀的RTSP播放器,一直深受用户的好评,经过了近3年的开发和迭代,从一开始的简单PC版本的RTSP播放功能,到如今支持PC(支持ocx插件)、Android、iOS全部都已经支持,而且功能越来越丰富,越来越优化,非常适合于安防行业的直播流播放; EasyPlayer项目地址:https://github.com/EasyDarwin/EasyPlayer 近期...
I have one angular app and one spring boot app, there is one request goes from UI to spring boot with some 100-200 objects even more, for each of these objects another back end system is called within...
I found this code: Unfortunately, this works on a windows machine. I couldn't find a way to rebind the print screen key on Solaris. I found out that I needed to disable the shortcut from the "key...
The code is the following: It should add one for each input. Right now it stays the same. For example, when you answer "What is your name", it should change risk form 0 to 1. You have to add...
Ok, i know this is a stupid question but i'm new with node.js and jade and sqlite3... so i was wondering how can i send the database dates from a javascript scrit to jade template to populate a table....
I'm new to testing with Pytest, and I've run into a minor but annoying hangup. In the command line test session results, I see my tests passing, but the percentage shown is not 100%, for some tests. W...