Android8.0.0-r4的OTA升级--差分包的制作

1、差分包的制作

1.1 update.zip包的目录结构
          |----boot.img   #boot.img是更新boot分区所需要的文件。boot.img主要包括kernel+ramdisk
          |----system/    #system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。可以将Android源码编译out/target/product/tcc8800/system/中的所有文件拷贝到这个目录来代替
          |----recovery/
                |----recovery-from-boot.p    #recovery-from-boot.p是boot.img和recovery.img的补丁(patch),主要用来更新recovery分区
                |----etc/
                        |----install-recovery.sh    #etc/目录下的install-recovery.sh是更新脚本
          |---META-INF/
              |CERT.RSA    #与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。
              |CERT.SF    #JAR文件的签名文件,其中前缀CERT代表签名者
              |MANIFEST.MF #这个文件定义了与包的组成结构相关的数据。类似Android应用的mainfest.xml文件。
              |----com/
                     |----google/
                             |----android/
                                    |----update-binary    #update-binary是一个二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作。该文件在Android源码编译后out/target/product/tcc8800/system bin/updater生成,可将updater重命名为update-binary得到。该文件在具体的更新包中的名字由源码中bootable/recovery/install.c中的宏ASSUMED_UPDATE_BINARY_NAME的值而定。
                                    |----updater-script    #此文件是一个脚本文件,具体描述了更新过程。可以根据具体情况编写该脚本来适应具体需求。该文件的命名由源码中bootable/recovery/updater/updater.c文件中的宏SCRIPT_NAME的值而定。
                             |----android/

                                    |----metadata    #描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等


    可以在包中添加userdata目录,来更新系统中的用户数据部分。这部分内容在更新后会存放在系统的/data目录下

    在具体升级时,对update.zip包检查时大致会分三步:①检验SF文件与RSA文件是否匹配。②检验MANIFEST.MF与签名文件中的digest是否一致。③检验包中的文件与MANIFEST中所描述的是否一致。

MTK平台的项目

在MTK平台的项目,需要增加与项目强相关的适配文件(scatter.txt、SEC_VER.txt、type.txt),scatter.txt分散加载文件,将可执行映像文件分散加载到不同的内存段(文件内容:指定不同内存段的起始地址)。

    type.txt是build升级包过程生成的,里面的值1代表FullOTA,0代表DiffOTA,android的上层的update流程中会check这个值。

    scatter.txt也是build升级包过程生成的,里面的内容来自于/mediatek/misc/ota_scatter.txt。mediatek/misc/ota_scatter.txt是在build full ota时会产生。该文件主要用于在升级的时候check升级前后parition layout是否有改变。

    SEC_VER.TXT是在编译时从alps\mediatek\custom\$PROJECT\security\recovery下copy过来的,用于在打开SUPPORT_SBOOT_UPDATE之后会使用

升级注意点
        1、签名变更、model变更都会导致升级失败;
        2、分区变化无法通过OTA升级;
        3、本地制作OTA差分包时确保分区和签名与制作的版本一致。

1.2  制作差分包
          对于update.zip包的制作有两种方式,即手动制作和命令生成。
          第一种手动制作:即按照update.zip的目录结构手动创建需要的目录。然后将对应的文件拷贝到相应的目录下,比如向系统中新加一个应用程序。可以将新增的应用拷贝到新建的update/system/app/下(system目录是事先拷贝编译源码后生成的system目录),打包并签名后,拷贝到SD卡就可以使用了。
          第二种制作方式:命令制作。Android源码系统中为我们提供了制作update.zip刷机包的命令,即make otapackage。该命令在编译源码完成后并在源码根目录下执行。 具体操作方式:在源码根目录下执行
                ①$ . build/envsetup.sh。 
                ②$ lunch 然后选择你需要的配置(如17)。
                ③$ make otapackage。
          在编译完源码后最好再执行一遍上面的①、②步防止执行③时出现未找到对应规则的错误提示。命令执行完成后生成的升级包所在位置在out/target/product/full_tcc8800_evm_target_files-eng.mumu.20120309.111059.zip将这个包重新命名为update.zip,并拷贝到SD卡中即可使用。
       2) 使用make otapackage命令生成update.zip的过程分析。
            在源码根目录下执行make otapackage命令生成update.zip包主要分为两步,
第一步是根据Makefile执行编译生成一个update原包(zip格式)。第二步是运行一个python脚本,并以上一步准备的zip包作为输入,最终生成我们需要的升级包。下面进一步分析这两个过程。
1、需要两个增量包

增量包的获取可以再服务器下载,也可以在本地生成,本地生成是 使用./mk hq8127_tb_b2b_l a1992[lenovo] otapackage 之后再/out/target/product/huaqin82_tb_b2d_td/obj/PACKAGING/target_files_intermediates生成了相应的.zip增量包

                    (这时候有一个异常:

                        使用管理员权限修改/usr/lib/python2.7/zipfile.py
                        def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True):
                        false改为true就编译成功了  
                        sudo gedit /usr/lib/python2.7/zipfile.py
                        )


2、根据两个增量包制作差分包./build xxx  - k   xxx -i 老包  新包 差分包

./build/tools/releasetools/ota_from_target_files -k device/mediatek/common/security/hq8127_tb_b2b_l/releasekey -i old.zip new.zip old_to_new.zip

update.zip包的签名:update.zip更新包在制作完成后需要对其签名,否则在升级时会出现认证失败的错误提示。而且签名要使用和目标板一致的加密公钥。加密公钥及加密需要的三个文件在Android源码编译后生成的具体路径为:
               out/host/linux-x86/framework/signapk.jar 
               build/target/product/security/testkey.x509.pem         
               build/target/product/security/testkey.pk8 。
用命令make otapackage制作生成的update.zip包是已签过名的,如果自己做update.zip包时必须手动对其签名。具体的加密方法:$ java –jar /out/host/linux/framework/signapk.jar –w /build/target/product/security/testkey.x509.pem                                      /build/target/product/security/testkey.pk8 update.zip update_signed.zip
    以上命令在update.zip包所在的路径下执行,其中signapk.jar testkey.x509.pem以及testkey.pk8文件的引用使用绝对路径。update.zip 是已经打好的包,update_signed.zip包是命令执行完生成的已经签过名的包。

FusionCompute CNA-8.0.0-arm是华为公司推出的一款基于ARM架构的新一代云计算虚拟化平台,该平台具有稳定性高、性能强、适用范围广等优点,在云计算领域具有广泛的应用价值。该平台提供了高效的虚拟化能力,能够为企业客户提供更加安全和可靠的虚拟化解决方案。 作为一种云计算服务提供平台,FusionCompute CNA-8.0.0-arm具有一些独特的特点。首先,该平台采用最新的ARM架构,可以支持更加广泛的应用场景,具有很强的通用性和可扩展性。其次,该平台提供了高度智能化的管理功能,可以自动化分配计算资源,优化资源的运用效率,并且具有严格的安全保障机制,可以有效保护客户的数据安全。 同时,FusionCompute CNA-8.0.0-arm采用了独特的分布式架构,可以快速响应客户的需求,为客户提供更加优质的服务。其虚拟化能力卓越,可以满足客户在不同行业的需求,例如金融、交通、医疗、教育等领域的应用需求,并可提供高效的云计算解决方案。 总之,FusionCompute CNA-8.0.0-arm是一款非常优秀的云计算虚拟化平台,是企业客户在建立云计算服务时的绝佳选择。该平台采用最新的ARM架构,具有通用性和可扩展性,且具有优异的性能表现,可以满足各种不同行业的需求。同时,该平台具有智能化的管理功能和严格的安全保障机制,可以为企业客户提供更加安全可靠、高效的云计算服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值