OTA 打包和升级


1. 概述

本文介绍的是Sigmastar的IPC、NVR平台在OTA升级流程中私有的打包、解包、升级的流程。本系统仅支持分区打包、分区升级,个别文件升级,不支持差分升级。

升级包后台服务器维护、终端下载及管理,请结合第三方服务。


2. 分区打包流程


2.1. 打包工具介绍

打包工具只会根据当前要升级的文件生成所需的文件头,文件数据请用'cat'命令追加到文件尾部。目前打包文件最大个数不得超过32,后续可根据情况增加。

打包工具的bin所在目录:

project/image/makefiletools/bin/otabinheader

打包工具的代码所在目录:

project/image/makefiletools/src/otabinheader/otabindeader.c

编译方法:

使用服务器x86编译 gcc otabindeader.c –o otabindeader

otabindeader工具命令参数介绍:

  • -c:

    创建一个空的升级包文件头,此命令不可与其他命令共同使用。

  • -a:

    在已经创建的升级包中追加新的头信息,追加新的信息中,必须使用以下参数告知升级的相关讯息。

  • -s:

    需要更新的源文件路径。

  • -d:

    需要更新的目标文件或者分区节点的路径。

  • -t:

    需要更新的目标文件或者分区的大小,单位为byte,可以用16/10进制表示。

  • -p:

    数据更新的方式,0表示分区更新,1表示ubi分区,2表示文件更新,后续可能会扩展。


2.2. OTA打包脚本介绍

2.2.1. 一般的打包流程举例

  1. 创建一个空的header

    otabindeader -c SStarOta.bin
    
  2. 根据需要打包的文件更新header数据

    otabindeader -s ./ipl_s.bin -d /dev/mtdblock0 -t 0xA0000 -p 0 -a  SStarOta.bin
    
  3. 使用'cat'命令把数据追加到升级包后面

    cat ./ipl_s.bin >>SStarOta.bin
    
  4. 循环执行2、3步骤,所有的文件进行打包

  5. 压缩升级包

    gzip SStarOta.bin
    

2.2.2. 在ALKAID中打包介绍

OTA打包流程目前已经整合到了Makefile中。

当程序编译和打包完成后,在project下输入指令:

make image-ota

会出现如下交互界面,选择需要打包的分区数据:

Make ipl ?(yes/no)

做出相关的选择后,会在project/image/output/images/下产生SStarOta.bin.gz,在配置partition的config文件中会配置分区进行打包。

举例:

  • 文件 spinand.ubifs.p2.partition.config中有变量:OTA_IMAGE_LIST

  • 在此变量后面追加需要打包的分区名称,并在分区的配置中添加字段xxx$(OTABLK),配置该分区需要升级的目标节点路径。

只有在OTA_IMAGE_LIST添加了分区名,才会在make image-ota的时候会询问该分区是否要进行ota升级。

分区打包脚本的所有逻辑在image/ota.mk中实现,有兴趣可以自行研究 。


2.3. 不带文件系统的RAW DATA打包

分区升级步骤会把需要升级的文件填到对应的mtdblock中,打包的流程大体上一样。不同的是在RAW DATA分区打包要自行实现升级包头的创建和数据填充。 这里以spinand的IPL分区打包举例:

define makeota

@read -p "Make $(1) ?(yes/no)" select; \

if [ "$${select}" **=**= "yes" -o "$${select}" == "y" ]; then \

$(foreach n,$(3),$(PROJ_ROOT)/image/makefiletools/bin/otabinheader -s $(2)
-d $(n) -t $(4) -p $(5) -a $(IMAGEDIR)/SStarOta.bin;cat $(2) >>
$(IMAGEDIR)/SStarOta.bin;) \

fi;

endef

ipl_spinand_mkota_**:**

$(call makeota,$(patsubst
%_spinand_mkota_,%,$@),$(IMAGEDIR)/ipl_s.bin,$($(patsubst
%_spinand_mkota_,%,$@)$(OTABLK)),$($(patsubst
%_spinand_mkota_,%,$@)$(PATSIZE)),0)

2.4. UBIFS/Squashfs/Jiffs2打包

如果新创建了分区,并且加到OTA_IMAGE_LIST中,则无需在ota.mk中添加特殊处理,这一类的分区升级文件会统一处理。

UBIFS的分区升级方式与其它两种格式稍有差异,因此在打包的时候UBIFS打包的-p参数是1,Squashfs/Jiffs2是0。


2.5. 个别文件打包

个别文件打包的-p参数是2,目前ALKAID中没有专门针对文件更新的打包,因此用户需要手动添加。


3. 分区更新流程


3.1. 分区升级前注意

在分区升级之前请保证分区umount成功。若需更新文件,请保证文件所在可读写的文件系统中,并且有写权限。

压缩包解包工具请联系我司FAE获取。


3.2. 压缩的升级包更新

otaupack -x SStarOta.bin.gz

3.3. 非压缩的升级包更新

otaupack -r SStarOta.bin