ota升级包中update-script脚本的生成

本文深入解析OTA升级流程中的核心文件update-script的作用及生成过程。详细介绍了脚本如何控制升级流程,并解释了ota_from_target_files.py脚本中不同类型的升级包是如何生成的。
摘要由CSDN通过智能技术生成

update-script脚本是整个ota升级的核心文件,它里面的内容就是控制升级流程的主要逻辑,实际控制着升级过程中大部分重要操作的实施细节,而处于升级包中同目录下的update-bianry负责真正执行update-script记录的操作。

 

在负责生成升级包的脚本ota_from_target_files.py中,不论我们调用这个脚本来产生全量包,增量包,或者是安卓新加入的block方式的增量包,在这个脚本中分别主要由 WriteFullOTAPackage(input_zip, output_zip) 、WriteIncrementalOTAPackage(target_zip, source_zip, output_zip)、WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip) 这三个函数负责完成它们的创建,在这些函数的刚开始,都有类似的这样一句,这里以生成全量包为例:

script  =  edify_generator.EdifyGenerator( 3 , OPTIONS.info_dict)

这里就是调用 /build/tools/releasetools下的edify_generator.py,创建一个edify格式的脚本,创件的这个script脚本就是最终升级包中的update-script

 

在之后的操作中,对script的各种操作,都是直接调用edify_generator.py中定义的方法,然后再这些方法中,对script传来的参数做各种处理,最终通过self.script.append向update-script中写入了各种命令,

比如说在WriteFullOTAPackage(input_zip, output_zip)中会有:

if  not  OPTIONS.omit_prereq:
     ts  =  GetBuildProp( "ro.build.date.utc" , OPTIONS.info_dict)
     ts_text  =  GetBuildProp( "ro.build.date" , OPTIONS.info_dict)
     script.AssertOlderBuild(ts, ts_text)

如果我们在调用ota_from_target_files.py时没有添加-n参数,表示我们不忽略时间戳检查,根据ota_from_target_files.py的main中:

elif  in  ( "-n" "--no_prereq" ):
OPTIONS.omit_prereq  =  True

然后根据另一篇分析ota升级过程的blog, GetBuildProp会读取target files中的misc_info.txt以及build.prop,分别读取到ro.build.date,ro.build.date.utc

ro.build.date=Wed Apr 13 03:29:53 CST 2016
ro.build.date.utc=1460489393

最后在edify_generator.py中,根据AssertOlderBuild的定义:

def  AssertOlderBuild( self , timestamp, timestamp_text):
     """Assert that the build on the device is older (or the same as)
     the given timestamp."""
     self .script.append(
     ( '(!less_than_int(%s, getprop("ro.build.date.utc"))) || '
     'abort("Can\'t install this package (%s) over newer '
     'build (" + getprop("ro.build.date") + ").");' %  (timestamp,
     timestamp_text))

最终会向update-script输出下面这句话:

(!less_than_int(1460489393, getprop("ro.build.date.utc"))) || abort("Can't install this package (Wed Apr 13 03:29:53 CST 2016) over newer build (getprop("ro.build.date")))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值