固件升级
LwM2M的固件升级对象使得固件升级的管理成为可能。固件升级对象包括安装固件包、更新固件、以及更新固件之后执行的其它动作。成功进行了固件升级后,device必须要重启,以使新的固件生效。
在设备重启之后,如果“Packet”资源包含了一个合法的但还未被安装的固件包,“State”资源必须为<Downloaded>状态, 否则须为<Idle>状态。
在设备重启之前,标识更新结果的相关数值必须保存。
Name | Object ID | Instances | Mandatory | Object URN |
---|
Firmware Update | 5 | Single | Optional | rn:oma:LwM2M:oma:5 |
固件升级对象的资源定义
ID | Name | Operations | Instances | Mandatory | Type | Range or Enumeration | Description |
---|
0 | Package | W | Single | Mandatory | Opaque | - | 固件包。 |
1 | Package URI | W | Single | Mandatory | String | 0-255 bytes | 固件包的下载URI。 |
2 | Update | E | Single | Mandatory | none | no argument | 更新固件。 只有当State资源是Downloaded状态时,该资源才是可执行的。 |
3 | State | R | Single | Mandatory | Integer | 0-3 | 固件升级的状态。这个值由客户端设置。0: Idle (下载之前或者成功更新之后) 1: Downloading (下载中) 2: Downloaded (下载已完成) 3: Updating (更新中)在Downloaded状态下,如果执行Resource Update操作,状态则切换为Updating。 如果更新成功,状态切换为Idle;如果更新失败,状态切换回Downloaded。 |
4 | Update Supported Objects | RW | Single | Optional | Boolean | - | 默认值是false。 如果该值置为true,则固件成功更新了之后,客户端必须通过更新消息或注册消息,向服务器通知Object的变动。 如果更新失败了,Object参数通过下一阶段的更新消息报告。 |
5 | Update Result | R | Single | Mandatory | Integer | 0-8 | 下载/更新固件的结果: 0: 初始值。一旦开始更新流程(下载/更新)开始,该资源的值必须被置为0。 1: 固件升级成功 2: 没有足够空间存储新固件包 3: 下载过程中内存不足 4: 下载过程中连接丢失 5: 新下载的包完整性检查失败 6: 不支持的包类型 7: 不合法的URI 8: 固件升级失败该资源可以通过Observe操作上报。 |
6 | PkgName | R | Single | Optional | String | 0-255 bytes | 固件包的名字。 |
7 | PkgVersion | R | Single | Optional | String | 0-255 bytes | 固件包的版本。 |
固件升级状态机
固件升级状态之间的变换关系如图所示:
图 1 固件升级状态图
固件升级流程
固件升级流程如图所示:
图 2 固件升级流程