前序
几个月前就完成了阿里云sdk的移植和集成,基本流程跑通,就继续干别的了,今天王正式产品中集成,发现还是费了些时间回想当时整个过程的一些细节,所以今天就详细记录下,争取下次再更一步节省时间。
ota升级文件制作
目前合宙air724ug由于flash空间的分布和设计,目前的ota只支持app的升级,无法支持整机core+app的升级。所以这也就是下面的步骤中,生成差分版本时,基线是core。
制作基线版本的fota bin
- 运行./xxx.bat fota=core hex目录下会生成基线版本(只有自定义服务器才需要基线版本(因为网页差分工具需要),使用合宙服务器不需要)。 xxx为自己项目的编译脚本名。
- 这个基线版本是跟随每个刷机版本对应的,每一个刷机版本都应该有fota bin文件,以备制作ota升级文件时需要。
制作新版本的bin
- 运行命令:
运行./xxx.bat fota=app hex⽬录下会⽣成只升级APP的新版本 运行./xxx.bat fota=core hex⽬录下会⽣成只升级CORE的新版本 运行./xxx.bat fota=all hex⽬录下会⽣成APP+CORE的新版本
- 因为我们是要针对core来制作app部分的差异,所以这里我们需要选择all:
./xxx.bat fota=all
生成差分文件
这里需要借助合宙的在线工具:http://doc.openluat.com/chafen
然后将生成的文件下载下来。
需要说明的是,差分出来的文件时比直接用fota=app生成的bin要大的,也就是说明这个差分中还有一些版本结构配置相关的数据,并不是把app扣出来而已。
阿里云ota任务创建
路径:物联网平台/监控运维/OTA 升级
https://iot.console.aliyun.com/ota/list
这里不展开,如有需要,日后再单独开篇。
硬件fota
目前的代码是直接移植的alifota SDK,需要自己是移植和适配必要的接口,目前我手里的是已经移植和调试过的,今天主要记录相关的关机日志路径,便于日后定位问题和熟悉过程。
- 向平台提交当前产品版本
[aiot_ota_api.c:1105] [INF] [alifota] top:/ota/device/inform/产品key/产品ID, payload:{"id":2, "params":{"version":"alifota1.0.0"}} - 服务器回复:
[aiot_mqtt_api.c:1208] [INF] pub: /ota/device/upgrade/key/id{"code":"1000","data":{"size":78911,"sign":"2373a5a6848e7e2021e2ca8befd3e0e5","version":"alifota1.0.1","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/f6fa639b5e67a6 - 解析ota文件信息
[ota.c:214] [INF] [alifoat]OTA target firmware version: alifota1.0.1, size: 78911 Bytes - mq建链
[rda8910_port.c:93] [INF] [alifota] create socket ...
[rda8910_port.c:130] [INF] [alifota] tcp connect to addr iotx-ota.oss-cn-shanghai.aliyuncs.com:80
[rda8910_port.c:141] [INF] [alifota] tcp connect success - 开始传输
[aiot_ota_api.c:950] [INF] [alifota]ln 950 fuc _http_recv_handler,download 0 78911
[core_http.c:581] [INF] [alifota] ln 581 fuc core_http_recv,res:512
[aiot_ota_api.c:501] [INF] [alifota] ln 501 fuc aiot_download_recv, download :512 512 - 传输下一个块,每次512字节
[ota.c:402] [INF] [alifota]++++++++++++++++++++++++ start 512 end 1023
[core_http.c:581] [INF] [alifota] ln 581 fuc core_http_recv,res:512
[aiot_ota_api.c:501] [INF] [alifota] ln 501 fuc aiot_download_recv, download :512 512 - 重复以上的步骤
- 接受最后一个包
[aiot_ota_api.c:950] [INF] [alifota]ln 950 fuc _http_recv_handler,download 78848 78911
[aiot_ota_api.c:975] [INF] [alifota] download size ok
[aiot_ota_api.c:982] [INF] [alifota]digest matched
[aiot_ota_api.c:986] [INF] [alifota]ln 986 fuc _http_recv_handler,percent 100 - 向平台上报进度
[aiot_ota_api.c:1105] [INF] [alifota] top:/ota/device/progress/key/id, payload:{"id":22, "params":{"step":"100","desc":""}}
[aiot_mqtt_api.c:465] [INF] ln:465. [alifota] mqtt send success:96 0^ - fota 成功
[ota.c:477] [INF] [alifota] ln 477,func:alifota_main, deinit mqtt
[ota.c:481] [INF] [alifota] ln 481,func:alifota_main, deinit ota
[aliyun.c:71] [INF] alifota success