Android9.0 vendor分区整包升级

1、涉及文件

2、流程解析

3、问题探讨

 

1、涉及文件

./build/make/core/Makefile  

ota脚本 ./build/toos/releasetools/  

9.0FOTA包  

9.0源码

2、流程解析

本次问题是一家方案公司的编译环境有问题,经常出现升级报错vendor不匹配的问题,大致看了下升级脚本 修改为整包升级或者不升级两种情况,

首先我们要明白,最开始只有system分区查分,后续出现了vnedor,oem等等,所以原生的脚本里其他分区全部 都是仿照system加进去的,

以下是差分的主入口,调用commpy的blockDifference处理,这里的vendor_diff是关键参数,后续所有的判断 都以该参数为准

所以第一种不升级vendor的情况就是直接修改venor_diff = None,这样所有vendor相关的操作都会去掉

第二种情况,整包升级vendor

第一步,对于这个问题,并没有直接想按流程研究代码的意思,而是想更为简单的直接照搬T卡包里的vendor升级的方法    

vendor_tgt = GetImage("vendor", OPTIONS.input_tmp)    

vendor_tgt.ResetFileMap()    

vendor_diff = common.BlockDifference("vendor", vendor_tgt)    

vendor_diff.WriteScript(script, output_zip)

报了一堆错误,可以看出是调用的BlockDifference方法出现问题

第四步,引入第二个猜想

既然我们使用了整包中的方法不能实现,那么如果我们直接用FOTA包编译整包呢,发现跟差分报相同的错误,

查看makefile中make otapackage过程中编译full包的方法       

./build/tools/releasetools/ota_from_target_files -v \      

  --block \       

--extracted_input_target_files $(patsubst %.zip,%,$(BUILT_TARGET_FILES_PACKAGE)) \       

-p $(HOST_OUT) \     

   -k $(KEY_CERT_PAIR) \     

   -s $(OTA_TOOL_EXTENSION)/mt_ota_from_target_files \

基本上是相同的命令,于是把我们的包放在源码中测试,发现可以做成功,

那基本上问题就可以确认了,问题 来源于 -P host_out,可以确定因为打包的库不全,所以出现了整包编译不出来的情况,包括整个升级vendor 的方法也无法运行

第五步,这里一开始并不知道是缺的那个库,所以挨个对比排查,最后查出了所缺的bin文件和lib64文件, 并且验证成功

3、问题探讨

这个问题有个疑问点,整包是缺库了,但是本身我们FOTA包中的库是如何打包进去的呢 这时候还是联想到了makefile  因为整包的命令中有 -P HOST_OUT 所以猜测这部分在makefile中是有定义的,查找后找到了这部分文件

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值