recovery模式差分(增量)升级小结

摘要:
最近在做recovery模式下的升级,简单的总结一下。在此过程中会写misc分区一个msg,主要是防止升级过程中掉电,在lk中会读取misc中的msg,如果升级中异常掉电,系统加载起来之后就继续进入recovery模式进程升级。

最近在做recovery模式下的升级,简单的总结一下。

先说说recovery模式,他是个升级小系统,有单独的kernel,通过特定的系统命令就可以进入到此系统中,选择进入正常系统的kernel还是recovery系统的kernel,

决定在于bootloader中,recovery中的boot与正常系统的boot烧写的是相同的kernel,不同点在于,recovery模式有一个单独的rootfs,这个是一个非常小的系统,

系统的很多功能也是不启动的, 主要目的就是留给升级流出足够的内存,主系统与recovery系统通信的桥梁就是/cache分区,此分区在正常系统启动与recovery

模式都是要被挂载mount。在主系统写命令到cache中,在recovery中读取,升级后,升级结果及日志也是在cache中。

recovery系统中大致流程,有些觉得不重要就省略了

1、执行find_recovery_partition.sh脚本它的工作就是生成/res/recovery_volume_detected文件,很重要的,挂载分区,attach类型为ubi的分区,如system modem。

2、rc启动脚本主要是启动了调用recovery进程的脚本,此脚本中运行recovery进程,升级的所有功能就在recovery进程中完成,recovery进程中涉及到的load_volume_table()

函数,读取的文件就是由find_recovery_partition.sh脚本生成的。

3、读取升级命令,升级命令位于/cache/recovery/command中,格式可以看函数注释。在此过程中会写misc分区一个msg,主要是防止升级过程中掉电,在lk中会

读取misc中的msg,如果升级中异常掉电,系统加载起来之后就继续进入recovery模式进程升级。

4、接下来就是从升级包重获取可执行程序,读取到/tmp中,升级包签名校验,本项目没涉及到不多说,然后就是创建管道,创建子进程,子进程中执行updater进

程。将进度,结果等通知到主进程,直到升级结束。

5、updater进程的执行过程,有太多的文件讲了及就不讲了。

6、升级结束后,finish_recovery做收尾工作,拷贝日志,写升级结果,然后系统reboot。

7、重启后,主系统正常启动后,就可以从cache中获取到当前升级的结果,日志,升级包等。

遇到的一些问题:

1、对nand来说,存在flash层的操作与mtd层的操作,lk中是对flash的操作可以按照页,页大小有2048/4096,mtd层对block操作的,一般都是好多个页组成,如64*2048,

作为一个block。有个分区比较特殊,不能多写flash,因为就是recovery中是mtd层的操作,想要精确,只能在lk中去做,比较特殊。

2、使用的打包工具,高人写了脚本,可以将modem分区按照ubi的方式打包,很是厉害啊,对比了下文件展开方式,升级包比较小,升级还快,真实佩服啊。

3、整个recovery模式升级功能其实高通已经完成了很多关键,主要的功能,我们也是简单的使用了下。

10-24 新增流程图

recovery模式差分(增量)升级小结第1张

简单说明

1、流程图中省略也很多细节,其实好多细节都是可以拿出来大写特写,比如差分文件是如何计算生成的(涉及imgdiff 与bsddiff),对于有文件系统的文件权限的处理

(full package时更关心一点) updater-script脚本用于执行的脚本解析器的运行,等等

2、标注红色的部分是我认为比较关键和重要的部分,包括为说明的updater-script每条命令对应的回调函数。

3、可能不同的应用场景不一样,当前没有将ui部分的逻辑,还有升级前的条件检查处理,升级异常等等。

4、recovery进程执行结束之后会执行收尾工作,保存日志,写升级结果等等,然后就是syse_reboot,图中带recovery 的块其实就是在recovery进程中执行的, 按照函数

调用顺序写的。

recovery模式差分(增量)升级小结第2张

长按二维码关注【嵌入式C部落】,获取更多编程资料及精华文章

免责声明:文章转载自《recovery模式差分(增量)升级小结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇常用CentOS 6/7 扩展源云计算openstack核心组件——glance— 镜像服务(6)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NEXUS S安卓4.0/4.1 【完美】 ROOT教程

原文链接:http://bbs.gfan.com/android-3517082-1-1.html 进行bootloader解锁(即使解锁,再上锁),会清除你手机上的【所有】数据(包括内部的16G SD 存储),包括但不限于应用、设置、联系人和账户等,请做好数据备份!·理论上对各种版本、各种机型的ROM都可以获取ROOT权限。·关于Busybox,麻烦各位...

安卓系统中各镜像介绍

背景 对于安卓开发而言,了解各镜像的意义、内容以及如何制作,有极大的意义。 注意,ROM中的5个镜像文件的扩展名都是img,但其格式却不同,也就是说不能使用同一种方法对其进行格式解析。 系统镜像(System.img) 系统镜像用于存储Android系统的核心文件,将其解压出来,就是设备中/system目录,里面包含了Android系统主要的目录和文件。一...

Android双系统实现

1. 前言: 刷机,似乎是安卓手机用户的一项专利,可是,会刷机的用户一般都是喜新厌旧的角色。 一个系统用久了。就想换到还有一个系统。或者认为没有原来的好,或者又认为要换回去。这样又要重刷。 可是刷来刷去都麻烦啊,而且每次刷机也不是没有风险的,一不小心就可能造成关键数据的丢失。 没有解决的方法吗? 有。双系统! 甚至三系统,四系统! ! 本文就是解决问题的,...

如何解包编辑打包android系统的boot.img文件

首先声明这是转帖,LINUX环境大家可以用VMWARE来虚拟,可以下载UBUNTU 目录 1、背景知识 2、boot和recovery映像的文件结构 3、对映像文件进行解包、编辑、打包的常规方法 3.1、另一种解包、编辑、打包的方法 4、将新的映像刷回到手机 5、解包、编辑、打包为我们带来了什么 6、本文讲的内容与使用update.zip刷机包不是一码事...

蓝牙的AVDTP协议笔记

1.概述    AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL)是用来描述音频/视频在蓝牙设备间的传输的协议,是A2DP协议的基础协议,其在协议栈中的位置如下: AVDTP协议建立在connection-oriented L2CAP channel上,只能支持point-to-point signali...

泛泰A870(高通600 cpu 720p) 刷4.4专用中文recovery TWRP2.7.1.1版(三版通刷)

欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪) windxixi(雪狐) wangsai008 组成) 说说中文TWRP的简史:         中文TWRP是本人在20...