OTA过程中更新自定义分区数据

1 篇文章 0 订阅

制作target_files

make otapackage
可以将编译的全部命令打出来跟踪详细编译中间包的过程

制作差分包

ota_from_target_files.py制作全量包、或者增量包

./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86 -k device/****/***Key -n -i A.zip B.zip
  • 覆盖所有分支情况
    版本A的target_file到版本B的target_file中,会有下面四种情况
    (1)版本A中没有分区custom,版本B中没有分区custom
    (2)版本A中没有分区custom,版本B中有分区custom
    (3)版本A中有分区custom,版本B中没有分区custom
    (4)版本A中有分区custom,版本B中有分区custom
    因而对应这四种情况都需要考虑,参考《代码大全》中防御式编程
    直接读取版本A,版本B中相关的文件,然后进行比较,如果不一样则进行更新,如果一样则不需要更新

制作差分包比较文件差异是,如果遇到解压文件找不到临时文件的情况,需要制定python解压时不要删除临时文件
在这里插入图片描述

对zip签名

  • 替换zip中updater

    unzip -o -q AtoB_update.zip -d AtoB
     cd AtoB
     zip -r ../AtoB_modified.zip ./       
    

修改updater后,需要进行手动签名

java -Xms2048m -jar out/host/linux-x86/framework/signapk.jar -w device/AAAA/common/keys/AAAAKey.x509.pem device/AAAA/common/keys/AAAAKey.pk8 I1029toJ0601_unsigned.zip update.zip

执行updater

  • updater中读取机型名称,同样需要防御式编程
    机型名称属性是否存在
    机型名称属性值是否有异常字符,前后是否有空格,参考如下
    C语言去除字符串首尾空格,trim()函数实现

  • 解压zip中文件到data分区
    参考install.cpp中代码解压文件到/data/分区,这样就得要求此时/data分区已挂载
    在这里插入图片描述

利用现有函数挂载分区

load_volume_table()
ensure_path_mounted()

调用execl执行想要执行的命令
在updater.c中fork出一个进程后,调用execl("/sbin/busybox", "sh", "-c", cmd, (char *) 0));
区分execl与system——应用程序中执行命令

./updater 1 /tmp/update.log AtoB_signed.zip

参见C++ main函数中参数argc和argv含义及用法

参考:
https://www.cnblogs.com/cxchanpin/p/7020315.html
https://blog.csdn.net/huangyabin001/article/details/43965307

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seiyaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值