MTK Recovery image的OTA升级过程

本篇所分析的是MTK recovery.img自身升级流程的分析,分为四个部分

1、boot.img recovery.img 的区分

2、编译的流程,make otapackage生成 recovery-from-boot.p 和 install-recovery.sh 

3、差分包内容,正常升级boot.img

4、开机执行流程,init.rc  执行install-recovery.sh 升级recovery  

 

1、boot.img recovery.img 的区分

Ramdisk.img 虚拟内存盘会被打包到boot.img和recovery.img中(但不是同一个ramdisk.img).

ramdisk.img中比较重要的文件是init 和init.rc,其中init是system/core/init/编译而来

boot.img中ramdisk里的init.rc位于system/core/rootdir/init.rc

recovery.img中ramdisk里的init.rc位于bootable/recovery/etc/init.rc

kernel加载结束以后第一个进程是执行init,init会解析init.rc文件,并起相应的服务,所以正常开机和进入recovery所起的进程是不一样的

2、编译的流程

找一份MTK 8.1 代码执行编译后发现,make后 out/target/product/project/system 中并未包含 recovery-from-boot.p 和 install-recovery.sh文件

MTK Recovery image的OTA升级过程_第1张图片

所以继续执行make otapackage,编译后发现out/target/product/project/system/下的文件没有发生变化,而system.img 等固件进行了更新,

而obj/PACKAGING/target_files_intermediates/full_k63v2_64_bsp-target_files-1534904310/SYSTEM/

该目录下的文件已经更新并且包含了我们需要的两个文件

这里面其实有两个问题

1、为什么make otapackage 后固件会更新

查看编译的log可以看出,otapackage这个过程,在makefile中执行后,在obj 下拷贝了system下的文件,然后加入recovery-from-boot.p 和 install-recovery.sh,使用add_img_to_target_files.py 重新生成了 system.img ,boot.img 固件部分,并使用replace_img_from_target_files.py替换到了out下,这样保证中间包,整包,刷机文件都是一样的

2、这两个新加的文件是怎么生成的,这两个文件生成都是在common.py中执行

MTK Recovery image的OTA升级过程_第2张图片

MTK Recovery image的OTA升级过程_第3张图片

3、差分包内容,正常升级boot.img,并在升级脚本中写入

MTK Recovery image的OTA升级过程_第4张图片

4、开机执行流程

Step 1. Boot Rom  

Step 2. Bootloader

Step 3. 初始化Kernel

Step 4. init进程

在该步骤中init.rc 会加载init进程负责创建系统中最关键的几个核心daemon(守护)进程,尤其是zygote和servicemanager

而在该步骤的最后一句会执行:

该文件会运行install-recovery.sh , 将recovery-from-boot.p 该patch打在recovery上,生成新版本的recovery:

抓升级后卡机的log可以看到对应的log信息

你可能感兴趣的:(Andrdoid,OTA升级)