OTA Updates官方文档(一,OTA 升级)

写在前面:

Android设备可以接受和安装基于系统和应用的更新。在设备中有一个特殊recovery分区,在这个分区中有一套特殊的恢复系统可以将下载的更新包进行解压并应用到系统中去。

本节主要描述了更新包的组织架构,并且概述了如何使用更新包打包工具制作系统升级的更新包。OTA 的存在是用来对潜在系统的升级,或者在系统分区安装只读(不可卸载)的应用程序,因此在升级过程中不会影响到用于已经安装到系统中的 应用程序。

本节的内容主要基于Android5.x版本。

一、Android设备布局的设计

通常,在Android设备中的flash常常包含下面一些分区:

boot

boot分区中包含了Linux内核和一个很小的根文件系统(会被加载到RAM中去),用来挂在系统等分区,而且boot分区还被用来启动system分区中的运行环境。

system

system分区中包含了系统级的应用如通话、音视频等,此外还有一些库文件。而这些应用程序和库文件往往是开源的,我们可以在AOSP中去查看相关的实现。正常情况下(非root)这些基础的应用程序为只读不可进行卸载。而且只有在OTA 时才会发生变化。

vendor

vendor分区中也有一些应用程序和库文件,但这些是由第三方提供,至于开源与否,不好说,至少在aosp中是看不到源码的。当然非root情况下也是无法进行卸载的,是出厂时预置的只读的应用程序。

userdata

userdata分区是用户的天堂,用户在使用应用程序时所产生的一些数据都保存在这里,比如保存的常用联系人,短信息等。

cache

cache分区是极少数应用程序才能访问到的一个分区(需要一些特定的权限),通常被用来保存OTA包,还有一些在升级过程中所产生的日志文件如last_log等。

recovery

recovery是一个特殊的分区,在recovery分区中有一套完整的linux系统,被用来读取更新包和对其他分区进行升级。

misc

misc是一个很小的分区,常常被recover分区用来保存一些ota 相关的信息。

二、OTA 升级流程

标准的OTA升级流程包含以下几步:

1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户。推送的信息常常会包含OTA更新包的下载地址和一些版本信息。

2.Update程序会将更新包下载到cache分区下,并提醒用户安装更新。

3.设备会重启进入recovery模式,同时启动recovery分区下运行环境,不再启动boot分区下的运行环境。

4.recovery运行环境初始化时会启动recovery二进制程序并根据/cache/recovery/command中的命令对更新包进行下一步操作。

5.Recovery运行环境对更新包中/res/key的签名进行校验,如果校验失败会中断升级。

6.Recovery二进制程序会对更新包中的数据进行解压同时根据解压出的数据对boot、system、和vender分区进行相应的更新。对system分区的更新也同时包含了新的recovery分区的更新。

7.重启设备

a.载入新的boot分区,并执行升级后的system分区中的二进制文件。

b.系统启动时会同时校验recovery分区,如果recovery与升级时保存在system分区下的信息不一致会对recovery进行更新。

8.系统更新完成。

三、Android5.x与Android4.0/3.0/2.3不同之处。

从Android2.3/3.0/4.0到Android5.x的迁移过程中有很多函数特定的函数发生了变化,主要是一些C函数被重新用C++进行定义。下面的表格中列出了一些新旧函数的交替。


C function


C++ method


device_recovery_start()


Device::RecoveryStart()


device_toggle_display()

device_reboot_now()


RecoveryUI::CheckKey()

(also RecoveryUI::IsKeyPressed())


device_handle_key()


Device::HandleMenuKey()


device_perform_action()


Device::InvokeMenuItem()


device_wipe_data()


Device::WipeData()


device_ui_init()


ScreenRecoveryUI::Init()

下面为原文:http://source.android.com/devices/tech/ota/index.html#android-device-layout

Android devices in the field can receive and install over-the-air (OTA) updates to the system and application software. Devices have a special recovery partition with the software needed to unpack a downloaded update package and apply it to the rest of the
system.

This section describes the structure of these packages and the tools provided to build them. It is intended for developers who want to make the OTA update system work on new Android devices and those who are building update packages for use with released devices.
OTA updates are designed to upgrade the underlying operating system and the read-only apps installed on the system partition; these updates do not affect applications installed by the user from Google Play.

This section describes the OTA system as of the Android 5.x release. For help porting OTA-related code from older releases, see Migrating
from previous releases
.

Android device layout



The flash space on an Android device typically contains the following partitions.

boot
Contains the Linux kernel and a minimal root filesystem (loaded into a RAM disk). It mounts system and other partitions and starts the runtime located on the system partition.
system
Contains system applications and libraries that have source code available on Android Open Source Project (AOSP). During normal operation, this partition is mounted read-only; its contents change only during an OTA update.
vendor
Contains system applications and libraries that do not have source code available on Android Open Source Project (AOSP). During normal operation, this partition is mounted read-only; its contents change only during
an OTA update.
userdata
Stores the data saved by applications installed by the user, etc. This partition is not normally touched by the OTA update process.
cache
Temporary holding area used by a few applications (accessing this partition requires special app permissions) and for storage of downloaded OTA update packages. Other programs use this space with the expectation that files
can disappear at any time. Some OTA package installations may result in this partition being wiped completely.
recovery
Contains a second complete Linux system, including a kernel and the special recovery binary that reads a package and uses its contents to update the other partitions.
misc
Tiny partition used by recovery to stash some information away about what it‘s doing in case the device is restarted while the OTA package is being applied.

Life of an OTA update



A typical OTA update contains the following steps:

  1. Device performs regular check in with OTA servers and is notified of the availability of an update, including the URL of the update package and a description string to show the user.
  2. Update downloads to a cache or data partition, and its cryptographic signature is verified against the certificates in /system/etc/security/otacerts.zip.
    User is prompted to install the update.
  3. Device reboots into recovery mode, in which the kernel and system in the recovery partition are booted instead of the kernel in the boot partition.
  4. Recovery binary is started by init. It finds command-line arguments in /cache/recovery/command that point it to the downloaded package.
  5. Recovery verifies the cryptographic signature of the package against the public keys in /res/keys (part of the RAM disk contained in the recovery partition).
  6. Data is pulled from the package and used to update the boot, system, and/or vendor partitions as necessary. One of the new files left on the system partition contains the contents of the new recovery partition.
  7. Device reboots normally.
    1. The newly updated boot partition is loaded, and it mounts and starts executing binaries in the newly updated system partition.
    2. As part of normal startup, the system checks the contents of the recovery partition against the desired contents (which were previously stored as a file in /system).
      They are different, so the recovery partition is reflashed with the desired contents. (On subsequent boots, the recovery partition already contains the new contents, so no reflash is necessary.)

The system update is complete!

Migrating from Previous Releases



When migrating from Android 2.3/3.0/4.0 release, the major change is the conversion of all the device-specific functionality from a set of C functions with predefined names to C++ objects. The following table lists the old functions and the new methods that
serve a roughly equivalent purpose:

C function C++ method
device_recovery_start() Device::RecoveryStart()
device_toggle_display()

device_reboot_now()

RecoveryUI::CheckKey()

(also RecoveryUI::IsKeyPressed())

device_handle_key() Device::HandleMenuKey()
device_perform_action() Device::InvokeMenuItem()
device_wipe_data() Device::WipeData()
device_ui_init() ScreenRecoveryUI::Init()

Conversion of old functions to new methods should be reasonably straightforward. Don‘t forget to add the newmake_device() function to create and return an instance of your new Device
subclass.

时间: 2024-11-04 16:02:42

OTA Updates官方文档(一,OTA 升级)的相关文章

OTA Update官方文档(五、Recovery系统分区映射)

Recovery系统包含了很多钩子程序,因此OAT更新除了可以更新Android系统也可以更新设备的其他部分.(如基带.无线电处理器). 分区映射 从Android2.3起,平台开始支持eMMC存储设备和ext4文件系统.它同样支持MTD设备和yaffs2文件系统. 分区映射文件TARGET_RECOVERY_FSTAB一般会被recovery二进制程序和打包工具所使用,我们可以在BoardConfig.mk文件中配置映射文件的文件名为TARGET_RECOVERY_FSTAB. 下面是一个简单

OTA Update官方文档(二,OTA 打包工具)

写在前面: OTA打包工具ota_from_target_files(build/tools/releasetools/目录下)可以为我们创建两种类型的更新包:整包和增量包.打包工具一般来说会对我们称之为目标文件(target-files.zip)进行打包,该目标文件是有Android编译系统产生,通常可在终端下使用make otapackage生成. 一.整包升级 一个整包包含了Android设备的整个终态(system/boot/recovery分区),只要设备可以接收更新包并且进入reco

Android 5.x OTA Update官方文档(九、Sideloading-侧面安装机制)

写在前面: 本篇博文漏译了很多,英文功底比较好的同学可以选择阅读原版文档,如果方便请分享翻译后文档给大家,谢谢. recovery有一个侧面安装(sideloading)机制来方便我们手动的安装更新而不在使用OTA的方式.这种机制对于调试和维护是很有帮助的,特别是当我们无法正常启动我们的系统的时候. 目前来说我们,有了这种机制,我们可以在设备的SD卡中载入更新包.在没有启动设备的情况下,我们可以通过电脑将更新包拷贝到SD卡上,然后再将SD卡插入到设备中进行侧面安装.而且如果Android设备当前

Android 5.x OTA Update官方文档(八、图说Recovery UI)

写在前面: 若能直译,不会意译,意译不成,为了选择不误导他人也会漏译无伤大雅的部分,英语是硬伤,如果有误译,请路过的朋友帮忙指正,以免误导更多的朋友. RecoveryUI除了之前提到的标题.选项菜单.提示性文字还有另外的一个重要的成员图片.在正常的更新过程中,用户看到的仅仅是图片(这里指的标准的OTA升级流程,如开机进入recovery模式.安装更新时进度条发生变化,最后再开机进入正常模式),而且在这个过程,用户是没有机会与RecoveryUI进行交互的.但是一旦在更新过程中出现了异常,用户所

OTA Update官方文档(四、OTA更新包解读)

写在前面: 系统创建通过"bootable/recovery/updater"创建一个二进制更新程序并在OTA包中使用进行更新的安装. 更新包实际上也就是一个.zip格式的压缩文件(如我们之前提到过的ota_update.zip,incremental_ota_update.zip).在这个压缩包中包含了一个可执行的二进制程序-EMTA-INF/com/google/android/update-binary.这个二进制程序我们可以理解成一个升级程序,这个升级程序包含了一系列的内建函数

Android 5.x OTA Update官方文档(十、版本签名)

在Android中,一般来说有两个地方使用加密签名. 1.每个.apk文件必须进行签名.Android的程序包管理器通过两种方式使用签名: 当一个应用程序被替换时,只有相同签名的应用才能操作旧版本的数据. 两个应用如果签名一致,那么这两个应用可以共享User ID和用户数据. 2.OTA更新包必须进行签名否则更新程序无法进行安装.(注!我们制作更新包的时候如果不指定key,系统会指定默认的key进行签名,如testkey.) 证书和秘钥 每个秘钥需要两个文件:扩展名为.x509.pem的证书(公

Android 5..x OTA Update官方文档(七、构建设备)

我们通过调用recovery_ui.cpp中make_device()函数来创建一个Device的实例,如下: class TardisDevice : public Device { // ... all the above methods ... }; Device* make_device() { return new TardisDevice(); } 编译recovery_ui.cpp 再通过前一篇对recovery_ui.cpp的介绍我们来介绍一下如何为recovery_ui.cpp

Android 5..x OTA Update官方文档(六、定制Recovery UI)

recovery界面 为了支持不同的硬件设备(物理按键.显示.LEDs等),我们可以定制recovery界面进行可视化显示,并进行相关的操作.那么我们可以通过继承bootable/recovery/defalust_device.cpp,并重写相关的函数来为我们的设备进行可视化定制.因此本篇博文旨在为大家介绍如何构建一个能够实现recovery界面定制的静态库.首先来了解西面这段头文件: device/yoyodyne/tardis/recovery/recovery_ui.cpp #inclu

hbase官方文档(转)

Apache HBase™ 参考指南  HBase 官方文档中文版 Copyright © 2012 Apache Software Foundation.保留所有权利. Apache Hadoop, Hadoop, MapReduce, HDFS, Zookeeper, HBase 及 HBase项目 logo 是Apache Software Foundation的商标. Revision History Revision 0.95-SNAPSHOT 2012-12-03T13:38 中文版