基于阿里云平台和CSDK的air724ug fota流程

前序

几个月前就完成了阿里云sdk的移植和集成,基本流程跑通,就继续干别的了,今天王正式产品中集成,发现还是费了些时间回想当时整个过程的一些细节,所以今天就详细记录下,争取下次再更一步节省时间。

ota升级文件制作

目前合宙air724ug由于flash空间的分布和设计,目前的ota只支持app的升级,无法支持整机core+app的升级。所以这也就是下面的步骤中,生成差分版本时,基线是core。

制作基线版本的fota bin

  1. 运行./xxx.bat fota=core hex目录下会生成基线版本(只有自定义服务器才需要基线版本(因为网页差分工具需要),使用合宙服务器不需要)。 xxx为自己项目的编译脚本名。
  2. 这个基线版本是跟随每个刷机版本对应的,每一个刷机版本都应该有fota bin文件,以备制作ota升级文件时需要。

制作新版本的bin

  1. 运行命令:
    运行./xxx.bat fota=app hex⽬录下会⽣成只升级APP的新版本
    运行./xxx.bat fota=core hex⽬录下会⽣成只升级CORE的新版本
    运行./xxx.bat fota=all hex⽬录下会⽣成APP+CORE的新版本
  2. 因为我们是要针对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,需要自己是移植和适配必要的接口,目前我手里的是已经移植和调试过的,今天主要记录相关的关机日志路径,便于日后定位问题和熟悉过程。

  1. 向平台提交当前产品版本
    [aiot_ota_api.c:1105] [INF] [alifota] top:/ota/device/inform/产品key/产品ID, payload:{"id":2, "params":{"version":"alifota1.0.0"}}
  2. 服务器回复:
    [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
  3. 解析ota文件信息
    [ota.c:214] [INF] [alifoat]OTA target firmware version: alifota1.0.1, size: 78911 Bytes
  4. 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
  5. 开始传输
    [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
  6. 传输下一个块,每次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
  7. 重复以上的步骤
  8. 接受最后一个包
    [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
  9. 向平台上报进度
    [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^
  10. 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

coolwatcher日志

硬件日志

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注