免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 14524 | 回复: 0
打印 上一主题 下一主题

[其它] VS-RK3XXX 板卡的Recovery资料介绍 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2022-01-05 10:42 |只看该作者 |倒序浏览
1.1 Recovery 模式简介
Recovery 模式指的是一种可以对安卓机内部的数据或系统进行修改的模式,(类似于windows pe 或
DOS)。在这个模式下我们可以刷入新的安卓系统,或者对已有的系统进行备份或升级,也可以在此恢复出
厂设置。
1.2 Recovery 模式在框架层的位置
Android 启动后,会先运行bootloader。Bootloader 会根据某些判定条件决定是否进入recovery 模
式。Recovery 模式会装载recovery 分区,该分区包含recovery.img。Recovery.img 包含了标准内核(和
boot.img 中的内核相同)以及recovery 根文件系统。
Android recovery 三个部分两个接口,recovery 的工作需要整个软件平台的配合,从架构角度看,有
三个部分:
1. Main System: 用boot.img 启动的Linux 系统,Android 的正常工作模式。
2. Recovery:用recovery.img 启动的Linux 系统,主要是运行recovery 程序。
3. Bootloader:除了加载、启动系统,还会通过读取flash 的MISC 分区获得来自Main System 和
Recovery 的消息,并以此决定做何种操作。
两个通信接口:
1. /cache/recovery/:command、log、intent
2. BCB(Bootloader Control Block):misc 分区
我们先来看以上三部分是如何通信的,先看下图:

Main System 如何进入Recovery 模式:当我们在Main System 使用update.zip 包进行升级时,
系统会重启并进入recovery 模式。在系统重启前,我们可以看到Main System 定会向recovery 域写入
boot-recovery(粉红色线),用来告知bootloader 重启后进入Rcovery 模式。这一步是必须的,至于
Main System 是否会向recovery 域写入值我们在源码中不能肯定这一点。即便如此,重启进入Recovery
模式后,Bootloader 会从/cache/recovery/command 中读取值并放入到BCB 的recovery 域。而Main
System 在重启之前肯定会向/cache/recovery/command 中写入Recovery 将要进行的操作命令。
下图是Main System 进入Recovery 模式调用接口的流程图:

1.installPackage: RecoverySystem 的接口,完成升级包路径转换,并调用bootCommand。
2.bootCommand:RecoverySystem 的接口,将命令写入/cache/recovery/command,并调用
pm.reboot。
3.Pm.rebootowerManager 的接口,重启并进入Recovery 模式。


2 编译OTA 包
2.1 OTA 介绍
OTA (over the air)升级是Android 系统提供的标准软件升级方式。它功能强大,提供了完全升级
(完整包)、增量升级模式(差异包),可以通过本地升级,也可以通过网络升级。
2.2 生成完整包
完整包所包含内容:system、recovery、boot.img
发布一个固件正确的顺序:
1. make -j4
2. make otapackage -j4
3. ./mkimage.sh ota
发布固件必须使用./mkimage.sh ota,将boot 与kernel 打包,不需要单独烧kernel,如果量产固件
是分开的,将会影响后面差异包升级,除非你不需要用差异升级。
在out/target/product/rkxxxx/目录下会生成ota 完整包rkxxxx-ota-eng.root.zip,改成
update.zip 即可拷贝到T 卡或者内置的flash 进行升级。

2.3 生成差异包
OTA 差异包只有差异内容,包大小比较小,主要用于OTA 在线升级,也可T 卡本地升级。OTA 差异包
制作需要特殊的编译进行手动制作。
(1)首先发布v1 版本的固件,生成v1 版本的完整包
(2)保存
out/target/product/rkxxxx/obj/PACKAGING/target_files_intermediates/rk3188-target_files-en
g.root.zip 为rkxxxx-target_files-v1.zip,作为v1 版本的基础素材包。
(3)修改kernel 代码或者android 代码,发布v2 版本固件,生成v2 版本完整包
(4)保存
out/target/product/rkxxxx/obj/PACKAGING/target_files_intermediates/rk3188-target_files-en
g.root.zip 为rkxxxx-target_files-v2.zip,作为v2 版本的基础素材包。
(5)生成v1-v2 的差异升级包:
Android7.1 google CTS 测试要求开启verifying boot 功能。目前默认开启verifying boot 功能的平台有
RK3368H Android7.1 mid、RK3399 Android7.1 mid,作差异包时必现加上block 参数。
./build/tools/releasetools/ota_from_target_files -v -i rkxxxx-target_files-v1.zip
-p out/host/linux-x86 -k build/target/product/security/testkey rkxxxx-target_files-v2.zip
out/target/product/rk3188/rkxxxx-v1-v2.zip

说明: 生成差异包命令格式:
ota_from_target_files
-v -i 用于比较的前一个target file
--block 使用block 方式进行OTA 升级,打开verfying boot 的功能时必现加上这个参数
-p host 主机编译环境
-k 打包密钥
用于比较的后一个target file
最后生成的ota 差异包
2.4 升级包打包脚本使用
2.5 注意事项
完整包和素材包是不一样的。
从生成差异包的方法可以知道,差异包是两个版本的素材包做差异生成,所以每发布一个版本固件必须
保存obj 下的素材包以及升级的完整包和./mkimage.sh ota 生成的各个imgage。
如果有使用在线升级,必须给每个版本固件配置唯一的ota 版本号:
device/rockchip/rksdk/rksdk.mk 中的
ro.product.version = 1.0.0(也可以是其他格式的版本号字符串)

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP