固件升级流程

更新时间:2018-02-06 21:05:51

概述

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

以下描述固件在线升级功能接口定义以及所涉及的MQTT Topic定义。

升级业务流程

图片.png | center | 704x677

升级过程中JSON交互定义

设备端上电上报当前固件版本号

  • 设备端向云端上报固件版本Topic
    /ota/device/==inform==/{productKey}/{deviceName}

  • JSON定义如下:

{
    "id": "1",
    "params": {
        "version":"xxxxxxxx"
    }
}
其中,
id:消息ID号,保留字段;
version:设备当前固件版本号。
  • 设备端向云端推送固件版本信息后:

A. 若云端存在此设备型号的升级策略,则云端采用2.2)中topic向设备端发布升级推送。其JSON定义如下:

{
    "id":"123",
    "code":1001,
    "data":{}
}
其中,
code:Alink协议错误码。
     1000,平台有最新升级固件;
     1001,终端上的固件就是最新;
     1002,升级失败;
     1003,没有可用固件;
     1004,请求参数错误;
     1005,非法设备;
     1006,未知情况。
data:详细内容由code确定。

B. 若云端无此升级策略,则无消息推送。

注:

  • 设备端版本信息上报,采用的是inform)上报的;

  • 云端对设备端的推送,则采用upgrade)实现的。

云端向设备端推送升级请求

  • 设备端订阅Topic响应云端升级请求
    /ota/device/==upgrade==/{productKey}/{deviceName}

  • JSON定义如下:

{
    "code": "1000",
    "data": {
        "size": 432945,
        "version": "2.0.0",
        "url": "https://iotx-ota-pre.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D",
        "md5": "93230c3bde425a9d7984a594ac55ea1e"
        },
    "id": 1507707025,
    "message": "success"
}
其中,
code:Alink协议错误码。
     1000,平台有最新升级固件;
     1001,终端上的固件就是最新;
     1002,升级失败;
     1003,没有可用固件;
     1004,请求参数错误;
     1005,非法设备;
     1006,未知情况。
size:固件文件内容大小。
md5:固件内容的MD5值,32位的hex String。
url:固件的URL,带有时效30分钟,超过这个时间后再下载,服务端拒绝访问。
version:固件的目的版本号。

设备端向云上报升级状态信息

  • 设备端上报系统进度Topic
    /ota/device/==progress==/{productKey}/{deviceName}

  • JSON定义如下:

{
    "id": "1"
    "params": {
        "step":"1",    
        "desc":" xxxxxxxx "
    } 
}
id:消息ID号,保留值。
step:[1, 100]    下载进度比
    "-1"    代表升级失败,
    "-2"    代表下载失败,
    "-3"    代表校验失败,
    "-4"    代表烧写失败
    desc:    当前步骤的描述信息,如果发生异常可以用此字段承载错误信息

注意:desc字段为必填字段,未填上报会报错。

升级注意事项:

STEP 1:系统上电,升级准备阶段
设备端有且仅需上报一次当前设备固件版本信息。
以便OTA服务器判断是否需向设备端推送升级请求。

OTA服务器向设备端推送升级请求前提:
OTA服务器端当前产品型号最终固件版本同1)中上报版本不一致。

OTA服务器端与设备端上报版本信息不一致是根据字符串模式匹配判定。
因此,OTA服务器支持版本回退的升级策略。

设备端版本信息上报,采用的是inform)上报的;
云端对设备端的推送,则采用upgrade)实现的。

STEP2:固件升级阶段
固件升级策略提交后,是对设备端进行逐一升级并非同一时间实施升级。
待升级设备的升级状态以实际上报为准 。

非在线设备在上电启动时,平台会根据此设备的固件版本上报信息判定是否需推送升级请求。

升级流程启动后,设备端需通过进度上报topic向云端上报设备端升级状态
(成功、失败,升级百分比等)。以便OTA服务器端向WEB前端生成实际升级状态。

在推送升级失败消息前,请务必保证服务端已生成OTA升级进度。
==**(即设备端已上报大于0的升级进度信息,以确保服务端生成升级进度。)**==

STEP3:固件升级结束
设备端升级完成,必需向topic:/ota/device/inform/${productKey}/${deviceName}
发布当前已升级的最新固件版本信息。
OTA服务器端收到此最新固件信息,则判定升级成功;反之,则升级失败。

常见的升级错误

签名错误,如果设备端获取的固件的url不全or手动修改了url内容就会出现如下错误

图片.png | center | 704x178

固件下载超时(默认30分钟),则出现拒绝访问错误

图片.png | center | 663x185

results matching ""

    No results matching ""