固件升级流程
更新时间:2018-02-06 21:05:51
概述
固件在线升级功能是网络设备所必须支持的基础服务。在设备固件出现安全漏洞、软件BUG维护、自身功能优化、以及设备性能改良等需更新固件时,在线升级功能就尤为重要。
以下描述固件在线升级功能接口定义以及所涉及的MQTT Topic定义。
升级业务流程
升级过程中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内容就会出现如下错误
固件下载超时(默认30分钟),则出现拒绝访问错误