OTA固件升级

固件升级支持远程空中OTA(Over The Air)升级设备固件,实现对设备的远程维护、功能升级、问题修复等场景的使用。您可以指定产品新增一个固件,对固件进行验证,验证通过后开始批量升级,并在固件详情中查看升级结果。

前提条件

设备已烧录了一个固件版本,且已成功连接到生活物联网平台。

背景信息

固件升级功能是网络设备所必须支持的基础服务。在设备固件出现安全漏洞、软件bug维护、自身功能优化、以及设备性能改良等需更新固件时,在线升级功能就尤为重要。

生活物联网平台目前提供两种升级方式。

  • 静默升级:设备连云后若发现有新的固件版本就自动进行升级,无需用户干预。
  • App提醒升级:手机App会提示用户有新版本可用,并询问用户是否确认升级,只有在用户确认升级的情况下才会进行设备升级。

新增固件

  1. 登录生活物联网控制台
  2. 在控制台首页,单击固件升级OTA固件升级OTA

    也可以在运维中心,单击OTA固件升级

    运维固件升级
  3. (可选)若您的设备搭载了AliOS Things芯片,可以开启安全升级功能。

    安全升级是保证固件完整性、机密性的一种方式,建议打开。使用安全升级功能,设备端需配合对固件和固件的签名进行验证。具体请参见AliOS Things技术文档

    1. 固件升级页,单击安全升级
    2. 在对话框中,将待升级产品对应的安全升级按钮设置为

      当安全升级功能为时,可单击对应的复制按钮,复制公钥,用于设备端验证签名。

  4. 固件升级页,单击添加固件添加固件
  5. 添加固件对话框中,输入固件信息,单击确认,上传固件文件。
    参数描述
    固件类型
    • 整包:您上传的固件文件是完整的固件文件,将推送整包固件给设备进行升级。
    • 差分:您上传的升级包文件仅包含新版本升级包与之前版本的差异部分,仅推送差异部分至设备,设备进行差分还原,还原为完整升级包。差分升级可有效减少升级对设备资源的占用,和减少下发升级包的流量消耗。

      设备使用AliOS-Things芯片,阿里云提供差分包生成方法和差分还原算法,请参见OTA差分工具使用指南。您也可以自行生成差分包并完成差分还原算法开发。

    固件名称设置固件名称。支持中文、英文、日文、数字、下划线(_)、中划线(-)、小括号(()),必须以中文、英文或数字开头,长度不能超过 40 个字符。
    所属产品选择固件所属产品。
    说明 可以退出弹窗进行选择产品。
    固件版本号设置该固件的版本号。仅支持英文字母、数字、点号(.)、短划线(-)和下划线(_)。长度限制为1~64个字符。

    固件类型选择为整包时,需设置的参数。

    待升级版本号选择待升级的固件版本号。下拉选项框中,将展示当前产品下所有设备的固件版本号,选择一个或者多个待升级的固件版本。

    固件类型选择为差分时,需设置的参数。

    升级后版本号设置升级后的固件版本号。

    固件类型选择为差分时,需设置的参数。

    固件模块固件模块用于区分同产品下设备的不同模块的升级。
    • 选择模块:从已有的固件模块中选择。
    • 新增模块:自定义新的模块。仅支持英文字母、数字、点号(.)、短划线(-)和下划线(_)。长度限制为1~64个字符。默认填写default。
    签名算法
    • 产品的入网类型为蓝牙:仅支持MD5算法。
    • 当产品设备使用阿里云提供的Android SDK,且固件类型选择为差分时,必须选择MD5算法。
    • 其他:支持MD5和SHA256算法。
    上传固件上传固件文件。文件大小不能超过1,000 MB,仅支持BINTARGZTAR.GZZIPGZIPAPK类型的文件。
    固件描述可描述该固件的功能等信息。描述长度不超过100个字符,一个中文计为一个字符。

验证固件

在进行批量升级之前,您需要先进行固件验证,确认固件各项功能正常使用之后再批量升级,避免因固件缺陷导致升级后大量设备不能正常工作。验证固件的本质是指定少量设备进行固件升级。固件验证通过后不能再次验证。

重要 在验证固件之前,设备需要已烧录了一个固件版本,且已成功连接到生活物联网平台。
  1. 选择要验证的固件,单击操作中的验证固件
    说明 固件上传至物联网平台后,必须使用少量设备对固件进行验证。确认测试设备升级成功后,才能批量升级。
  2. 配置验证固件的参数。
    验证固件
    参数描述
    待升级版本号下拉选项框中,展示当前产品下所有设备的固件版本号,选择一个或者多个待升级的固件版本。选择待升级版本号后,使用这些固件版本的设备将展示在待验证设备列表中。
    待验证设备选择用于此次测试的设备。
    设备升级超时时间设置单个设备的升级超时时间,即多长时间之后,升级未完成则为超时。从设备第一次上报升级进度开始计算时间。可选值范围:1分钟~1,440分钟。
    根据自身需要进行配置APP确认升级
    • 是:升级固件时,在App上推送消息,提醒用户本次的升级。
    • 否:升级固件时,不提醒App端用户,即静默升级。
  3. 单击确定完成。
    • 固件验证不通过

      状态显示为验证失败,您可以重新验证固件。

    • 固件验证通过

      状态显示为已验证,您不可以再次验证固件,您可以操作批量升级。

批量升级

固件验证通过并确认各项功能正常后,该固件才可以在大批设备上投入使用。批量升级的本质也是对大批设备定向推送升级通知。

批量升级操作前的说明如下:

  • 测试设备不能进行批量升级。
  • 禁止使用未验证的固件进行批量升级操作。
  • 设备从收到升级通知开始直至升级完成是一个渐进的过程,请耐心等待升级结果。
  • 批量升级所覆盖的设备可能会因为设备上一次的升级动作没有结束(设备处于待升级或者升级中),而导致本次升级中该部分设备升级失败。
  • 设备在实际升级过程中出现错误(如下载失败、校验失败、解压失败等),并且通知OTA系统后,系统会将本次升级动作置为完成(而实际升级操作结果为失败)。
  • 可以在固件详情页,看到批量升级对应设备的升级情况,升级失败列表选项卡会显示简要的升级失败原因。
说明 由于设备端存在的差异化,即使固件验证升级成功,也无法完全体现设备升级后各项功能是否正常可用,建议您在设备固件升级后自行检查设备是否正常使用,避免批量升级后引起大批量的设备故障。
  1. 选择要进行批量升级的固件,单击操作中的批量升级
  2. 配置批量升级的参数。
    批量升级
    根据自身需要进行配置APP确认升级
    • :升级固件时,在App上推送消息,提醒用户本次的升级。
    • (默认):升级固件时,不提醒App端用户,即静默升级。
    参数描述
    待升级版本号下拉选项框中,展示当前产品下所有设备的当前固件版本号,从中选择待升级的固件版本。整包升级时,需设置该参数。
    升级策略
    • 静态升级:仅升级当前满足升级条件的设备。
    • 动态升级:除了升级当前满足升级条件的设备,还将持续检查设备是否满足升级条件,对满足升级条件的设备进行升级。包括但不限于以下情况:
      • 后续新激活的设备满足升级条件。
      • 设备当前上报的固件版本号不满足升级条件,后续上报了满足升级条件的固件版本号。
      说明 一个固件下只能有一个动态升级批次。如果固件下已有一个动态升级批次,将不能创建新的动态升级,需先取消原有动态升级批次。
    升级范围
    • 全部设备:升级该产品下的全部设备。
    • 定向升级:选择为定向升级后,下方出现设备范围选项框。单击选项框,在右侧弹出的对话框中,选择要升级的设备。仅升级被选中的设备。
      说明 定向升级的待升级版本为多选。默认选中您之前已输入的待升级版本号。
    • 区域升级:升级实际地理位置在指定区域的设备。选择为区域升级后,下方出现指定区域的省份和城市选项框。
    • 灰度升级:即局部升级。升级策略选择为静态升级时出现的可选项。

      选择为灰度升级后,下方出现灰度范围输入框,需针对已选择的设备,设置灰度百分比。物联网平台根据设置的灰度百分进行计算,计算结果向下取整。灰度升级的设备至少为1个。

    升级时间指定设备固件升级的时间。
    • 立即升级:立即进行固件升级。
    • 定时升级:设置升级开始时间、升级结束时间。升级开始时间距当前时间最少10分钟,最多7天。升级结束时间距开始时间最少1小时,最多为30天,可不设置,不设置表示不会强制结束。
      说明 仅当升级策略为静态升级时,支持定时升级。
    固件推送速率设置每分钟向多少个设备推送固件下载URL。取值范围:10~1,000。
    升级失败重试间隔如果升级失败,在什么时候进行重试升级。可选:
    • 不重试
    • 立即重试
    • 10分钟后重试
    • 30分钟后重试
    • 1小时后重试
    • 24小时后重试
    升级重试上限次数选择升级失败后,最多可重试几次。可选:
    • 1次
    • 2次
    • 5次
    设备升级超时时间设置单个设备的升级超时时间,即多长时间之后,升级未完成则为超时。从设备第一次上报升级进度开始计算时间。可选值范围:5分钟~1,440分钟。
    是否覆盖设备之前的升级任务同一时间,如果一个设备处于多个升级批次中(即设备状态为:待确认、待推送或已推送),需要选择是否覆盖设备之前的升级任务。
    • :设备只执行新的升级任务,之前的升级任务会被取消。
    • (默认):若设备已有升级任务,则只执行已有任务。
    说明 不覆盖升级中的任务,此时继续执行升级中的任务,不执行新的任务。
    是否仅对新上报版本的设备生效当升级策略选择为动态升级时的参数。

    选择是否仅对后续新上报版本号的设备生效,待升级版本号以新上报的新版本号为准。

    • :仅升级后续新上报版本号的设备。
    • (默认):升级当前满足升级条件的设备,并持续检查后续新上报版本号的设备是否满足升级条件。
  3. 批量升级提交后,单击该固件的查看,然后在批次管理页签下的设备列表页签中,查看升级状态。
    批次管理升级详情
    状态说明
    待确认还未在手机App确认,设备可进行OTA升级。

    创建批次任务时,App确认升级选择是,升级任务才会进入该状态。

    待推送还未向设备推送固件升级通知。

    待推送状态原因有三种:设备离线、定时推送或速率限制,状态分别显示为:

    • 待推送(设备离线)
    • 待推送(定时:2020/XX/XX XX:XX:XX)
    • 待推送
    已推送已向设备推送固件升级通知,设备尚未上报进度。
    升级中设备已收到升级通知,并已上传升级进度。
    升级成功设备上报升级进度100%,并上报了升级后的正确版本号。
    说明 设备升级成功后,建议第一时间上报升级成功后的正确版本号,否则,可能会因为超时,导致升级失败。
    升级失败以下原因可能造成设备升级失败。
    • 设备未结束上一次升级任务,又发起新的批量升级,且选择不覆盖之前的升级任务,则后发起的升级任务会升级失败。

      您可以:

      • 等设备完成上一次升级后,再对设备发起新的升级。
      • 在发起升级时,选择覆盖设备之前的升级任务。
        说明 设备处于升级中状态的升级任务不会被覆盖。
    • 设备通过升级进度的Topic,向物联网平台上报数值-1、-2、-3或-4,则认为升级失败。数值含义如下:
      • -1:升级失败。
      • -2:下载失败。
      • -3:校验失败。
      • -4:烧写失败。
    • 设备升级时,从设备第一次上报升级进度开始计算升级时间,在设置的超时时间截止前,设备没有上报升级后的目标版本来完成升级,则认为升级失败。
    • 设备在升级中状态下,上报了源版本和目标版本以外的版本信息,则认为升级失败。

    如果发起批量升级时,指定了待升级版本号,且选择了升级失败后重试,在以下情况下会进行自动重试升级。

    • 设备在升级中状态下,上报了源版本和目标版本以外的版本信息导致的升级失败。
    • 设备通过上报升级进度的Topic,主动上报-1、-2、-3或-4导致的升级失败。

    自动重试时,设备在云端的升级状态显示不变,即在已推送状态下重试时,状态仍然显示为已推送;在升级中状态下重试时,状态仍然显示为升级中

    说明 云端不会触发自动重试逻辑的情况:
    • 因升级超时(失败原因:timeout)而导致的升级失败。
    • 您主动取消的升级。
    已取消已取消该设备的升级。