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/...
.......
//因高通保密问题,不敢露出过多跟版本相关的信息,仅供使用高通平台的同僚参考
这里有两个注意点:
- ifelse这个语法是高通自己定义的,源解释在bootloader/recovery/ 下可以看到,大概意思就是:ifelse(a,b,c),假设a为真,则执行b,否则执行c
- msm.boot_update 这个源码在:yourproject/vendor…/oem-recovery/下的oem-updater.cpp里,其编译成库,然后在bootloader下的updater下的android.mk里将其声明为函数,跟其他函数一起注册到updater里。
- 2提到的内容,可搜索关键词RegisterDeviceExtensions进行过滤,查看分析。
4
4.升级过程
跟安卓源生一样,升级boot, system vendor,关于子系统,由步骤3提到的内容,根据脚本进行全量升级。
…先粗糙总结下,有空再梳理下安卓源生的recovery流程。