• Home
  • Annotate
  • current directory
Name Date Size #Lines LOC

..29-Oct-2021-

2ndboot/29-Oct-2021-

hal/29-Oct-2021-

include/29-Oct-2021-

ota_agent/29-Oct-2021-

tools/29-Oct-2021-

README.md A D29-Oct-20219.2 KiB181137

package.yaml A D29-Oct-20214.1 KiB

README.md

1
2@page ota ota
3
4[更正文档](https://gitee.com/alios-things/ota/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html)
5
6# 概述
7OTA是over the air的缩写,是AliIOS Things 提供的完备的升级方案,对各种升级场景都有很好的支持。目前AliIOS Things除一般的整包升级外,现有的高阶能力有:压缩升级、差分升级及安全升级;支持的升级通道:http、https、BLE、3G/4G,NB等;复杂场景支持:网关及子设备升级,连接型模组升级非连接主设备的间接升级;完备的配套工具:差分工具、本地签名工具、ymodem辅助升级工具,多固件打包工具等;
8主要功能列表如下:
91、支持乒乓升级:固件可在两个分区运行,支持固件版本回退,保证设备安全不变砖;
102、支持断点续传:弱网环境下,支持固件从断点处继续下载;
113、支持固件验签:固件可在云端或用本地签名工具进行数字签名(防止固件被篡改,对固件hash值进行非对称加密),设备端可完成对固件验签(用端侧的公钥对已签名的固件进行验签);
124、支持https安全下载方式:除支持http下载外,支持https下载方式;
135、支持MD5/SHA256固件完整性检验:为保证固件完成性,固件下载完成后,都有完整性校验;
146、支持网关子设备升级:当HaaS 100 做网关时,HaaS 100 OTA 除支持网关本身的升级外,也支持其子设备的升级;
15
16## 版权信息
17> Apache license v2.0
18
19## 目录结构
20```tree
21.
22├── 2ndboot                               # 二级boot升级(差分恢复和固件解压缩)
23├── hal                                   # OTA HAL适配层(适配flash、os)
24│   ├── ota_hal_ctrl.c                    # flash和ota agent的中间层
25│   ├── ota_hal_digest.c                  # 安全相关md5、sha256、rsa适配层
26│   ├── ota_hal_digest.h
27│   ├── ota_hal_fs_ctrl.c                 # 文件系统操作相关适配层
28│   ├── ota_hal_fs_plat.c                 # 子设备升级文件相关接口
29│   ├── ota_hal_os.c                      # os适配代码
30│   ├── ota_hal_os.h
31│   ├── ota_hal_param.c                   # bootloader相关参数
32│   ├── ota_hal_vfs_plat.c                # flash相关适配
33│   ├── ota_hal_trans.c                   # 传输底层适配层(比如mqtt、coap、http)
34│   └── ota_hal_trans.h
35├── include                               # 头文件
36│   ├── ota_agent.h                       # 初始化和回调函数相关头文件
37│   ├── ota_hal.h                         # hal层头文件
38│   ├── ota_import.h                      # 内部使用头文件(错误码、类型定义、内部接口等)
39│   ├── ota_log.h                         # ota日志头文件(对接各种日志接口)
40│   └── ota_updater.h                     # 对外接口头文件
41├── ota_agent                             # 所有下载和消息传输、加解密功能
42│   ├── download
43│   │   ├── ota_download_file2fs_http.c   # 通过http下载文件(放在flash中)
44│   │   └── ota_download_http.c           # 通过http下载文件(放在flash中)
45│   ├── mcu
46│   │   ├── ota_download_uart.c           # 通过串口下载文件
47│   │   ├── ota_mcu_ymodem.c              # 通过ymodem协议下载文件(设备是server端)
48│   │   └── ota_slaver_upgrade.c          # 子设备下载文件
49│   ├── ota_service.c                     # ota初始化函数和主逻辑下载文件
50│   ├── transport
51│   │   └── ota_transport_mqtt.c          # ota mqtt消息通道
52│   └── verify
53│       ├── ota_verify_hash.c             # 文件完整性校验,如md5,sha256
54│       └── ota_verify_rsa.c              # 非对称加密验签
55├── package.yaml                          # ymal编译环境配置文件
56├── README.md                             # 说明文档
57└── tools
58    ├── ota_image_package.py              # 打包压缩文件
59    ├── upack_data_file.c                 # js轻应用打包解压文件
60    ├── upack_data_file.h
61    └── xz                                # xz压缩算法库
62```
63
64## 依赖组件
65* cjson
66* mbedtls
67* linksdk
68* http
69
70# 常用配置
71系统中相关配置已有默认值,如需修改配置,统一在yaml中**def_config**节点修改,具体如下:
72> 是否支持使用https方式: 默认0, 如需修改,在yaml中修改CONFIG_HTTP_SECURE配置
73```yaml
74def_config:
75  CONFIG_HTTP_SECURE: 1
76```
77
78# API说明
79
80ota_service_init 订阅mqtt topic和系统上报版本,在mqtt连接成功时候调用
81ota_service_start 开始执行升级(如从flash中读取url进行升级)
82ota_service_register_cb 注册用户升级回调函数
83
84# 使用示例
85
86组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。
87待开发环境搭建完成后,可以按照以下步骤进行示例的测试。
88
89## 步骤1 创建或打开工程
90
91**打开已有工程**
92
93如果用于测试的案例工程已存在,可参考[《AliOS Things集成开发环境使用说明之打开工程》](https://help.aliyun.com/document_detail/302381.html)打开已有工程。
94
95**创建新的工程**
96
97组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择ota_demo案例。ota_demo案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)98
99## 步骤2 添加组件
100
101因为ota_demo案例中已添加了对组件依赖,所以只需确认ota_demo组件的package.yaml中是否已经添加了依赖:
102
103```yaml
104depends:
105  - ota: master
106```
107
108## 步骤3 下载组件
109
110在已安装了  的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:
111
112```shell
113
114aos install ota
115
116```
117
118上述命令执行成功后,组件源码则被下载到了./components/ota路径中。
119
120## 步骤4 添加示例
121
122示例代码参考[solutions/ota_demo/otaappdemo.c](https://gitee.com/alios-things/ota_demo/blob/master/otaappdemo.c),以运行ota_demo为例(更详细的使用流程请参考[《HaaS物联网设备OTA解决方案》](https://g.alicdn.com/alios-things-3.3/doc/ota_demo.html),示例主要完成如下:
123
124示例代码分成3个主要部分:
1251、注册ota回调函数
126> 注册存储模块信息变量,默认支持3个模块
127> ota_register_module_store(&ctx, g_module_info, 3);
128注册云端触发升级时的触发回调函数
129> ota_register_trigger_msg_cb(&ctx, (void *)ota_upgrade_cb, NULL);
130注册状态上报函数
131> ota_register_report_percent_cb(&ctx, (void *)ota_transport_status, (void *)&ctx);
132设置用户自定义模块信息
133> ota_set_module_information(&ctx, USER_MODE_NAME, SUBDEV_FILE_PATH, OTA_UPGRADE_CUST);
134
1352、初始化ota模型
136> ret = ota_service_init(&ctx);
137
1383. 上报模块版本号
139> ota_report_module_version(&ctx, "default", MY_APP_VER);
140
1414、在ota升级主函数中调用ota_service_start执行升级
142> aos_task_new("ota_demo", (void *)ota_service_start, (void *)pctx, 1024 * 6);
143
144## 步骤5 编译固件
145
146在示例代码已经添加至组件的配置文件,并且ota_demo已添加了对该组件的依赖后,就可以编译ota_demo案例来生成固件了,具体编译方法可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)147
148## 步骤6 烧录固件
149
150ota_demo案例的固件生成后,可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)来烧录固件。
151
152## 步骤7 打开串口
153
154固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考[《AliOS Things集成开发环境使用说明之查看日志》](https://help.aliyun.com/document_detail/302382.html)155
156当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。
157
158## 步骤8 测试示例
159
160**CLI命令行输入:**
161```sh
162netmgr -t wifi -c wifi_ssid wifi_password  # 连接wifi
163```
164
165> CLI关键日志:
166```sh
167[  16.497]<D>WIFI_SERVICE NETMGR_WIFI_EVENT_CONNECTED           # wifi连接成功
168[  18.804]<D>WIFI_SERVICE NETMGR_DHCP_SUCCESS                   # DHCP完成,获取到IP地址
169[  19.306]<I>WIFI_SERVICE [sntp] OK: sec 1616741677 usec 989111 # SNTP完成,获取到最新网络时间
170```
171
172**云端执行升级**:
173> 详细参考参考[《HaaS物联网设备OTA解决方案》](https://g.alicdn.com/alios-things-3.3/doc/ota_demo.html)
174
175> CLI关键日志:
176```
177[ 119.366]<I>ota download start upg_flag:0x9669       # 开始ota升级
178[ 130.827]<E>ota download complete:0                  # ota升级完成
179[ 142.523]<E>ota Download complete, rebooting ret:0.  # ota升级完成并重启
180```
181