当前位置:   article > 正文

Android10 rk平台OTA升级过程梳理一_rk ota

rk ota

前言

工作中需要使用OTA对设备进行升级,于是梳理了一下OTA前后的升级流程,将过程制作成了过程图,可以按这个过程图去查找代码,分析请看后面的梳理,所有的代码环境:android10。

OTA启动刷机,重启之前

首先分析OTA包中的文件为:
├─firmware-update
└─META-INF
    └─com
        ├─android
            ├─metadata
            ├─otacert
        └─google
            └─android
               ├─update-binary
               ├─updater-script
 ├─boot.img
 ├─system.new.dat.br
 ├─system.patch.dat
 ├─system.transfer.list
 ├─vendor.new.dat.br
 ├─vendor.patch.dat
 ├─vendor.transfer.list 

firmware-update:目录下主要是一些固件的升级,如mbn、dtbo、vbmeta等
boot.img:更新boot分区所需要的文件,包括kernel+ramdisk
system.new.dat.br:Android8.1镜像后新的压缩格式,为数据部分,里面是system.img数据。
system.transfer.list:数据转换的描述列表。
system.patch.dat:升级时用到,ota包中大小为0。
vendor和system类似。
update-binary:二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作,文件的命名由bootable/recovery/install.cpp 中的UPDATE_BINARY_NAME值而定。
updater-script:升级包的升级脚本,文件的命名由bootable/recovery/updater/updater.cpp中的SCRIPT_NAME值而定。
metadata:描述设备信息及环境变量的元数据,主要包括一些编译选项、签名公钥,时间戳以及设备型号等。
otacert:ota签名。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

OTA升级准备工作

system_server(RecoverySystemService)通过socket与uncrypt建立了通信,uncrypt做了如下操作:
1.指令保存在misc分区
2.update.zip所在内存地址被保存在/cache/recovery/block.map
另外,update.zip包的路径需要以/data开头

细节如下:
1)在android7.0中,recovery模式中已经不在挂载data分区,而且data分区可以设置加密,这样更促进了在recovery分区中不挂载data分区,加强了用户的安全性。但是这样就会有问题,当升级包较大时cache分区是放不下的,增大cache分区只会浪费资源,最好的办法还是把它放在data分区下。但是因为加密和不挂载的原因导致在recovery模式下是无法使用升级包的。而uncrypt机制就是解决这个问题的。它的基本原理就是,在正常模式下记录升级包所在的磁盘区块号,而且如果加密了就通过读进行解密,再绕过加密写到存储磁盘上。当记录好了磁盘区块号后,启动到recovery模式后就可以不挂载data分区,直接根据区块号读取升级包中的数据进行升级

2)system_server把update.zip路径保存在文件/cache/recovery/uncrypt_file
uncrypt读取/cache/recovery/uncrypt_file生成/cache/recovery/block.map

3)/cache/recovery/block.map 是update.zip存放的数据地址

4) 如果要测试uncrypt的功能,可以在adb shell环境下测试,将ota包推到data目录下,直接执行uncrypt命名。
# uncrypt /data/ota.zip /cache/recovery/block.map
# cat /cache/recovery/block.map
/dev/block/bootdevice/by-name/userdata    //block device
1189005639 4096                           //文件大小,block块大小
2                                         //block块的个数
440320 524288                             //第一个block块的范围区间
561152 767469                             //第二个block块的范围区间

5)
OTA升级重启前,主要的操作是对升级包进行处理的过程,对升级包提前处理的原因是因为在进入recovery模式进行升级时无法加载升级包所在的分区。在重启前的主要操作如下:

1.通过SystemProperties设置属性(setup-bcb),向BCB中设置升级的Command;

2.通过SystemProperties设置属性(uncrypt),开启uncrypt服务,将升级包生成一系列的block块,recovery可以读取block.map文件并获取这个文件的数据作为升级包;

3.uncrypt完成后,重启。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

OTA刷机,recovery启动流程

OTA启动后流程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/336160
推荐阅读
相关标签
  

闽ICP备14008679号