测试指南
测试环境
硬件
- 开发板
- TF 卡
- 网线(如需测试网络 OTA )
软件
- PC 端的串口终端软件,用于 PC 和开发板进行串口通信
- HTTP 服务器(如需测试网络 OTA )
编译和烧录
按照参数配置打开 OTA 相关配置后,保存退出,重新编译,烧录
编译过程中可以看到 OTA 包打包信息,如下所示:
make CPIO image begin...
ota_info.bin
d21x_os.itb
rodata.fatfs
data.fatfs
14663 blocks
Successfully updated size to ota.cpio
make CPIO image done...
2
3
4
5
6
7
8
上述 OTA 包包含了
d21x_os.itb
、rodata.fatfs
、data.fatfs
三个需升级的文件,分别为系统、只读文件系统和读写文件系统。 TF 卡 OTA 准备
测试程序 test_ota
默认从 TF 卡根目录读取,将 ota.cpio
放到 TF 卡根目录即可
test_ota
的源码路径为 packages\artinchip\ota\test_ota.c
网络 OTA 准备
搭建HTTP服务器
推荐使用 NGINX 工具在 Windows 上搭建HTTP服务器
搭建过程
1.从官网下载 NGINX 软件包,地址:https://nginx.org/en/download.html
2.将下载的软件包进行解压,注意解压包的路径不能包含中文字符
3.在 CMD
环境下,启动 NGINX 服务,服务启动成功后,在任务管理器中会有两个 nginx
进程,并测试服务器是否工作正常
4.适配 nginx.conf
文件配置,重新加载配置,开放服务器目录
HTTP 服务器窗口如下所示:
上传 OTA 升级包到服务器目录
OTA 升级包文件名称是 ota.cpio
,执行命令 ,执行命令
进入到 images
目录下可以看到该文件将 ota.cpio
拷贝到 NGINX 服务器目录
验证
升级前可以确认当前环境变量,文件挂载信息,系统信息等。
1、确认系统启动位置(上电默认打印)
Start-up from os #说明从 os 升级
2、输入 fw_printenv 命令打印环境变量
aic /> fw_printenv
MTD=spi0.0:1m(spl),256k(env),256k(env_r),4m(os),4m(os_r),12m(rodata),12m(rodata_r),40m(data),40m(data_r)
osAB_next=A
rodataAB_next=A
dataAB_next=A
upgrade_available=0
bootlimit=5
bootcount=0
rodata_partname=blk_rodata
rodata_partname_r=blk_rodata_r
data_partname=blk_data
data_partname_r=blk_data_r
osAB_now=A
rodataAB_now=A
dataAB_now=A
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3、 mount
指令查看文件系统挂载信息
验证 TF 卡 OTA
烧录完成后,断开电源,上电,插入 TF 卡
启动 OTA 升级
在串口中直接输入命令 test_ota
aic /> test_ota
01-01 15:59:27 I/NO_TAG: find file ota_info.bin cpio data success
01-01 15:59:27 I/NO_TAG: cpio file size:10538496
01-01 15:59:27 I/NO_TAG: cpio file version:1.0.0
01-01 15:59:27 I/NO_TAG: Parsing cpio file info is successful!
01-01 15:59:27 I/NO_TAG: find file d21x_os.itb cpio data success
01-01 15:59:27 I/NO_TAG: osAB_now = A
01-01 15:59:27 I/NO_TAG: Upgrade B system
01-01 15:59:27 I/NO_TAG: Start upgrade to os_r, flag_cpio:1!
01-01 15:59:27 I/NO_TAG: Partition (os_r) find success!
01-01 15:59:27 I/NO_TAG: Start erase nand flash partition!
01-01 15:59:27 I/NO_TAG: Erase nand flash partition success! len = 32
01-01 15:59:27 I/NO_TAG: Start upgrade d21x_os.itb!
01-01 15:59:27 I/NO_TAG: Download: [=>
01-01 15:59:27 I/NO_TAG: Download: [==>
......
01-01 15:59:29 I/NO_TAG: Sum check success!
01-01 15:59:29 I/NO_TAG: download d21x_os.itb success!
01-01 15:59:29 I/NO_TAG: Incomplete header info! shdr.buflen = 8
01-01 15:59:29 I/NO_TAG: find file rodata.fatfs cpio data success
01-01 15:59:29 I/NO_TAG: rodataAB_now = A
01-01 15:59:29 I/NO_TAG: Upgrade B rodatafs
01-01 15:59:29 I/NO_TAG: Start upgrade to rodata_r, flag_cpio:2!
01-01 15:59:29 I/NO_TAG: Partition (rodata_r) find success!
01-01 15:59:29 I/NO_TAG: Start erase nand flash partition!
01-01 15:59:29 I/NO_TAG: Erase nand flash partition success! len = 96
01-01 15:59:29 I/NO_TAG: Start upgrade rodata.fatfs!
01-01 15:59:29 I/NO_TAG: Download: [>
01-01 15:59:29 I/NO_TAG: Download: [=>
01-01 15:59:29 I/NO_TAG: Download: [==>
......
01-01 15:59:33 I/NO_TAG: Sum check success!
01-01 15:59:33 I/NO_TAG: download rodata.fatfs success!
01-01 15:59:33 I/NO_TAG: find file data.fatfs cpio data success
01-01 15:59:33 I/NO_TAG: dataAB_now = A
01-01 15:59:33 I/NO_TAG: Upgrade B datafs
01-01 15:59:33 I/NO_TAG: Start upgrade to blk_data_r, flag_cpio:3!
01-01 15:59:33 I/NO_TAG: Partition (blk_data_r) find success!
01-01 15:59:33 I/NO_TAG: NFTL partition not need to erase!
01-01 15:59:33 I/NO_TAG: Start upgrade data.fatfs!
[ND]nftl start:320,51
[ND]nftl ok!
01-01 15:59:33 I/NO_TAG: Download: [>
01-01 15:59:33 I/NO_TAG: Download: [=>
01-01 15:59:33 I/NO_TAG: Download: [==>
01-01 15:59:33 I/NO_TAG: Download: [===>
01-01 15:59:36 I/NO_TAG: Sum check success!
01-01 15:59:36 I/NO_TAG: download data.fatfs success!
01-01 15:59:36 I/NO_TAG: Incomplete header info! shdr.buflen = 16
01-01 15:59:36 I/NO_TAG: find file TRAILER!!! cpio data success
01-01 15:59:36 I/NO_TAG: find file TRAILER!!! cpio data success
01-01 15:59:36 I/NO_TAG: os Next startup in B system
01-01 15:59:36 I/NO_TAG: rodata Next mount in B system
01-01 15:59:36 I/NO_TAG: data Next mount in B system
01-01 15:59:36 I/NO_TAG: Restarting system ...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
验证网络 OTA
烧录完成后,断开电源,上电,插入网线
查看启动打印信息
ai:
IPv4 Address : 192.168.31.200
Default Gateway: 192.168.31.1
Subnet mask : 255.255.255.0
MAC addr : 00:22:44:88:77:66
[I] aicphy_poll_thread()635 Port 0 link UP! autoneg mode: speed 100M, full duplex, flow control off.
2
3
4
5
6
测试网络连通状态
aic/> ping 192.168.31.22
aic/> Reply from 192.168.31.22: time=2ms
2
ping 通网络,需要等待一段时间
查看 OTA 升级命令
执行 help 命令查看 OTA 升级命令如下:
...
http_ota - Use HTTP to download the firmware
...
2
3
启动 OTA 升级
执行命令 http_ota
或者 http_ota http://192.168.31.22/ota.cpio
以下是相关升级信息
aic /> http_ota
using uri: http://192.168.31.20/ota.cpio
01-01 16:10:08 I/NO_TAG: OTA file size is (10538496)
01-01 16:10:08 I/NO_TAG: find file ota_info.bin cpio data success
01-01 16:10:08 I/NO_TAG: cpio file size:10538496
01-01 16:10:08 I/NO_TAG: cpio file version:1.0.0
01-01 16:10:08 I/NO_TAG: Parsing cpio file info once is sufficient and successful!
01-01 16:10:08 I/NO_TAG: find file d21x_os.itb cpio data success
01-01 16:10:08 I/NO_TAG: osAB_now = B
01-01 16:10:08 I/NO_TAG: Upgrade A system
01-01 16:10:08 I/NO_TAG: Start upgrade to os, flag_cpio:1!
01-01 16:10:08 I/NO_TAG: Partition (os) find success!
01-01 16:10:08 I/NO_TAG: Start erase nand flash partition!
01-01 16:10:09 I/NO_TAG: Erase nand flash partition success! len = 32
01-01 16:10:09 I/NO_TAG: Start upgrade d21x_os.itb!
01-01 08:08:50 I/NO_TAG: Download: [==>
01-01 08:08:50 I/NO_TAG: Download: [===>
......
01-01 16:10:11 I/NO_TAG: Sum check success!
01-01 16:10:11 I/NO_TAG: download d21x_os.itb success!
01-01 16:10:11 I/NO_TAG: find file rodata.fatfs cpio data success
01-01 16:10:11 I/NO_TAG: rodataAB_now = B
01-01 16:10:11 I/NO_TAG: Upgrade A rodatafs
01-01 16:10:11 I/NO_TAG: Start upgrade to rodata, flag_cpio:2!
01-01 16:10:11 I/NO_TAG: Partition (rodata) find success!
01-01 16:10:11 I/NO_TAG: Start erase nand flash partition!
01-01 16:10:11 I/NO_TAG: Erase nand flash partition success! len = 96
01-01 16:10:11 I/NO_TAG: Start upgrade rodata.fatfs!
01-01 16:10:11 I/NO_TAG: Download: [>
01-01 16:10:11 I/NO_TAG: Download: [=>
......
01-01 16:10:16 I/NO_TAG: find file data.fatfs cpio data success
01-01 16:10:16 I/NO_TAG: dataAB_now = B
01-01 16:10:16 I/NO_TAG: Upgrade A datafs
01-01 16:10:16 I/NO_TAG: Start upgrade to blk_data, flag_cpio:3!
01-01 16:10:16 I/NO_TAG: Partition (blk_data) find success!
01-01 16:10:16 I/NO_TAG: NFTL partition not need to erase!
01-01 16:10:16 I/NO_TAG: Start upgrade data.fatfs!
[ND]nftl start:320,51
[ND]nftl ok!
01-01 16:10:16 I/NO_TAG: Download: [>
01-01 16:10:16 I/NO_TAG: Download: [=>
......
01-01 16:10:21 I/NO_TAG: download data.fatfs success!
01-01 16:10:21 I/NO_TAG: find file TRAILER!!! cpio data success
01-01 16:10:21 I/NO_TAG: Download firmware to flash success.
01-01 16:10:21 I/NO_TAG: System now will restart...
01-01 16:10:21 I/NO_TAG: os Next startup in A system
01-01 16:10:21 I/NO_TAG: rodata Next mount in A system
01-01 16:10:21 I/NO_TAG: data Next mount in A system
01-01 16:10:21 I/NO_TAG: Restarting system ...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
升级完成以后,自动重启,加载新代码启动
升级判断
从程序打印log差异和文件系统中文件差异判断当前运行的版本
Boot 相关打印信息
Start-up from os/os_r
1.
os
表示从 os
分区读取数据启动 RTT 程序。 2.os_r
表示从 os_r
分区读取数据启动 RTT 程序。
RTT 相关打印信息
如果有进行文件系统升级,可以关注以下信息
Mount APP in blk blk_rodata_r
Mount APP in blk blk_data_r
2
1.blk_data 表示从 blk_data 分区挂载读写文件系统。
2.blk_data_r 表示从 blk_data_r 分区挂载读写文件系统。
3.blk_rodata 表示从 blk_rodata 分区挂载只读文件系统。
4.blk_rodata_r 表示从 blk_rodata_r 分区挂载只读文件系统。
此外,可以再次输入
mount
命令查看 版本回退
可以从 BootLoader 或者系统中执行 fw_setenv
将系统和文件系统变量改为原来的分区进行版本回退。
RTT 中进行回退
aic /> fw_setenv osAB_next B
aic /> fw_setenv rodataAB_next B
aic /> fw_setenv dataAB_next A
# 此处将系统、只读文件系统,读写文件系统,分别设置下次启动从B、B、A分区启动
aic /> fw_printenv
MTD=spi0.0:1m(spl),256k(env),256k(env_r),4m(os),4m(os_r),12m(rodata),12m(rodata_r),40m(data),40m(data_r)
bootlimit=5
rodata_partname=blk_rodata
rodata_partname_r=blk_rodata_r
data_partname=blk_data
data_partname_r=blk_data_r
bootcount=1
upgrade_available=0
osAB_now=A # 当前系统启动分区为A分区
rodataAB_now=A # 当前只读系统挂载为A分区
dataAB_now=B # 当前读写系统挂载为B分区
osAB_next=B # 下次系统启动分区为B分区
rodataAB_next=B # 下次只读系统挂载为B分区
dataAB_next=A # 下次读写系统挂载为A分区
aic /> reboot
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Boot 中进行回退
aic@tinySPL # fw_setenv osAB_next A
aic@tinySPL # fw_setenv rodataAB_next A
aic@tinySPL # fw_setenv dataAB_next B
aic@tinySPL #
aic@tinySPL # reboot
2
3
4
5