ITPub博客

首页 > > > Android recovery(二)

Android recovery(二)

作者:dapan 时间:2018-11-24 23:45:06 0 删除 编辑

recovery简述作用 01



Android 手机上正常运行两个系统,一个是正常使用的Android 系统,还有一个是recovery系统,recovery主要用来做刷机的功能,这个文章会说明recovery的一些功能和流程图,系统大家对Android有一定的了解。

Recovery相关概念 02


我们讨论recovery,一定离不开空中升级,所以这个章节说下几个概念性的知识点,大概如下

  • Recovery: Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式,也指Android的Recovery分区
  • OTA: Over-the-Air Technology,即空中下载技术,是 Android 系统提供的标准软件升级方式。 它功能强大,提供了完全升级、增量升级模式,可以通过 SD 卡升级,也可以通过网络升级。不管是哪种方式,都有几个过程:生成升级包、下载升级包、安装升级包。
  • Recovery System:Android系统内部实现的一个工具类,Android应用层操作Recovery模式的一个重要途径,它提供了几个重要的API,用于实现OTA包校验、升级以及恢复出厂设置(格式化数据和缓存)。
  • Main System:主系统模式,即Android正常开机所进入的Android系统
  • Bootloader:Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。
  • BCB:Bootloader Control Block,启动控制信息块,位于misc分区,从代码上看,就是一个结构体。


Android 分区介绍 03

首先介绍的是Android标准分区,但是有些芯片厂家会根据自己的需要做修改,Android默认的分区如下:

  • Boot:包含Linux内核和一个最小的root文件系统(装载到ramdisk中),用于挂载系统和其他的分区,并开始Runtime。正如名字所代表的意思(注:boot的意思是启动),这个分区使Android设备可以启动。如果没有这个分区,Android设备通常无法启动到Android系统。


  • System:这个分区几乎包含了除kerner和ramdisk之外的整个android操作系统,包括了用户界面、和所有预装的系统应用程序和库文件(AOSP中可以获取到源代码)。在运行的过程中,这个分区是read-only的。当然,一些Android设备,也允许在remount的情况下,对system分区进行读写。 擦除这个分区,相当于删除整个安卓系统,会导致不能进入Main System, 但不会影响到Recovery。因此,可以通过进入Recovery程序或者bootloader程序中,升级安装一个新ROM。
  • Userdata:用户数据区,用户安装的应用程序会把数据保存在这里,包含了用户的数据:联系人、短信、设置、用户安装的程序。擦除这个分区,本质上等同于手机恢复出厂设置,也就是手机系统第一次启动时的状态,或者是最后一次安装官方或第三方ROM后的状态。在Recovery程序中进行的“data/factory reset ”操作就是在擦除这个分区。正常情况下OTA是不会清除这里的数据的,指定要删除数据的除外。
  • Cache:系统缓存区,临时的保存应用数据(要把数据保存在这里,需要特地的app permission), OTA的升级包也可以保存在这里。OTA升级过程可能会清楚这个分区的数据。一般来讲,Android差分包升级也需要依赖此分区存放一些中间文件。
  • Recovery:包括了一个完整Linux内核和一些特殊的recovery binary,可以读取升级文件用这些文件来更新其他的分区。
  • Misc:一个非常小的分区,4 MB左右。recovery用这个分区来保存一些关于升级的信息,应对升级过程中的设备掉电重启的状况,Bootloader启动的时候,会读取这个分区里面的信息,以决定系统是否进Recovery System 或 Main System。


以上几个分区是Google官方的标准,对于第三方Android设备厂商来讲,分区的情况可能稍微不一样,比如Rockchip平台,还增加了user分区、kernel分区和backup分区。其中:


  • kernel:顾名思义,是存放kernel.img镜像的。在boot分区里面的kernel内核镜像损坏的情况下(比如flash损坏),bootloader会尝试加载kerner分区里面的内核镜像。
  • backup:存放整个系统镜像(update.img), 可用于恢复设备到出厂ROM。
  • user: 用户分区,也就是平时我们所说的内置sdcard。另外还有外置的sdcard分区,用于存放用户相片、视频、文档、ROM安装包等。



如何进入recovery模式 04

  • 使用adb 命令,adb reboot recovery
  • 组合键进入recovery 模式,绝大部分手机时候power+音量 加 键,好了,不是加就是减
  • 恢复出厂设置也会进入recovery模式,恢复出厂设置可以通过界面点击,也可以通过命令触发
    恢复出厂设置的命令
#/bin/sh  

rm -rf /cache/recovery/command  
echo "--wipe_data" > /cache/recovery/command  
echo "--wipe_cache" >> /cache/recovery/command  
sync  
sync  
sleep 2 
sync  
sync  
reboot recovery 


recovery代码位置 05

Android recovery的源码位置在Android SDK的 /bootable/recovery/ 位置


recovery处理流程 06

recovery处理流程图,图片大部分是英文,如果有看不懂的,简单查找一下,这些英文算是比较基础了。





这次大概说这么多,下次介绍在recovery模式下实现ota升级的流程,周一好,祝愿大家有一个美好的一周。



欢迎关注微信公众号-嵌入式Linux

觉得不错,请帮忙转发,点赞,您的每一次支持,我都将铭记于心




weixin.qq.com/r/Y0N9ZaX (二维码自动识别)


​

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87163