Qcom recovery流程(纯干货)

1.编译

** 这部分跟源生的一致,除了高通子系统的编译相关的,其余没有什么特别。**

source build/envsetup.sh
lunch [your project]
make -j8 | tee build1.log

**/如果需要添加子系统升级**
copy [需要更新的子系统程序] android/device/qcom/[your project]/radio/
//add by lyq end

//升级基础包和该次的全量包
make otapackage -j8 | tee build2.log

//生成差分包,前提要有两个不同版本的基础包
./build/tools/releasetools/ota_from_target_files -v -i  target-A.zip  target-B.zip ota-A-B-incremental.zip

说明:
前面编译没啥好说的,安卓源生。高通有
NON-HLOS.bin mdtp.img rpm.mbn abl.elf ....
等子系统,如果需要升级子系统,则拷贝到radio/下,就会打包到升级包里去,该子系统升级方式为全量升级。关于这部分升级的脚本在:yourproject/vendor…/tools/下的releasetools.py里,具体如何升级,看里面的脚本。

2.编译后生成的包

子系统升级会多出下面这个文件夹
里面打包了各种子系统文件在这里插入图片描述
里面打包了各种子系统文件
其余目录跟安卓源生一样。

3.升级脚本

编译后的升级脚本,跟安卓源生一样,除了子系统的部分,会出现如下

..........
# ---- radio update tasks ----

ui_print("Patching firmware images...");
ifelse(msm.boot_update("main"), (
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/...
.......
//因高通保密问题,不敢露出过多跟版本相关的信息,仅供使用高通平台的同僚参考

这里有两个注意点:

  1. ifelse这个语法是高通自己定义的,源解释在bootloader/recovery/ 下可以看到,大概意思就是:ifelse(a,b,c),假设a为真,则执行b,否则执行c
  2. msm.boot_update 这个源码在:yourproject/vendor…/oem-recovery/下的oem-updater.cpp里,其编译成库,然后在bootloader下的updater下的android.mk里将其声明为函数,跟其他函数一起注册到updater里。
  3. 2提到的内容,可搜索关键词RegisterDeviceExtensions进行过滤,查看分析。
    4

4.升级过程

跟安卓源生一样,升级boot, system vendor,关于子系统,由步骤3提到的内容,根据脚本进行全量升级。

…先粗糙总结下,有空再梳理下安卓源生的recovery流程。

你可能感兴趣的:(高通)