前言:
启明智显的「Model系列」芯片,作为工业、行业及车载产品市场的佼佼者,以其高性能、低成本及广泛的适用性赢得了市场的广泛认可。其中,Model4作为该系列中的佼佼者,不仅继承了前代产品的所有优点,还在功能性和用户体验上进行了全面升级。特别是其支持OTA(Over-The-Air)空中升级功能,使得设备固件更新更加便捷、高效。本指南将详细介绍Model4 OTA功能的使用方法及注意事项。
一、OTA功能简介
OTA技术允许设备在不拆卸、不连接电脑或其他外部设备的情况下,通过网络接收并安装最新的固件更新。对于Model4而言,这意味着用户可以随时随地通过无线网络对设备进行固件升级,从而享受最新的功能优化、性能提升以及安全补丁。
二、准备工作
- 网络连接:确保Model4设备已连接到稳定的无线网络,以便能够接收OTA更新包。
- 固件版本检查:通过设备界面或相关软件检查当前固件版本,以确定是否需要更新。
- 备份数据:在进行OTA升级前,建议备份重要数据以防万一。
三、OTA升级原理图
四、ZX OTA 系统方案组成
-
OTA app 程序从服务器上下载 OTA 升级包, 基于第三方库 ota-downloader 实现,采用分片下载机制,下载一部分程序,给目标分区升级一部分程序。 不需要一次下载整个数据包,节省了存储空间。
-
ZX OTA系统方案使用 A/B 系统方案,通过环境变量指导升级和启动。
五、选择 A/B 系统方案的原因
-
该方案可以解决“在升级过程中意外断电,造成系统更新失败,系统重启后不能继续升级”的问题。
-
该方案自带回滚机制,可以恢复到旧版本程序。
-
对比Recovery系统方案, 配置简单,维护方便。
-
该方案消耗的存储资源相对较少,现有平台存储资源完全能满足要求。
-
对比单系统方案,获取,校验,升级固件都在RTOS上进行,不涉及Boot,不需要额外存储空间保存 OTA 升级文件。
-
该方案是市面上的主流方案,很多厂家使用该方案。
六、升级说明
1、 A/B 系统方案分区信息
备注
ENV 分区,用来保存 env 环境变量,增加了一个备用 ENV 分区,确保在一份数据破坏后,另外一份数据还能继续使用
OS,RODATA分区各有一个备份分区,它们一起称为 A/B 系统
2、A/B 系统升级过程
3、 OTA升级相关环境变量
osAB_next=A
osAB_now=A
upgrade_available=0
bootlimit=5
bootcount=0
4、环境变量使用说明
5、环境变量在OTA升级过程中的作用
6、OTA升级包配置文件:ota-subimgs.cfg
相关文件路径如下(以M4为例):
target/m4/ZXM47D0N/pack/ota-subimgs.cfg
查看配置信息:
/* 需要升级的分区,根据需求添加,如果添加也需在image_cfg.json配置对应的 *_r 分区 */
> cat ota-subimgs.cfg
m4_os.itb
rodata.fatfs
data.fatfs
7、OTA升级包生成工具: mkcpio.py
tools/scripts/mkcpio.py
执行编译命令,会自动执行 mkcpio.py 命令生成 ota.cpio。mkcpio.py 具体调用了cpio, cpio.exe命令进行打包。
8、OTA包数据组成格式
9、SPINAND 平台 OS 阶段 app OTA 执行流程
zx_uart_ota uartx
|-> uart_rx_demo(argv[1]);
|-> uart_rx_demo_thread(uart 数据接收线程)
|-> aic_upgrade_start(); //packages/third-party/ota_downloader/absystem.c 升级前读取环境变量信息,获取将要升级的系统
|-> rt_device_read(serial, -1, uartrx, 1); //通过串口接收升级包数据,并根据串口协议存储数据到 uart_rx_buf
|-> _ota_update(uint8_t *framebuf, size_t len); //根据串口协议解析串口数据
|-> ota_shard_download_handle(char *buffer, int length); //采用分片方式写入数据
|-> ota_buf_push(&shdr, buffer, length); //将接收到的数据放到缓存区,供解析cpio头部信息
|-> find_cpio_data(&fhdr, shdr.buf, shdr.buflen); //解析cpio头部信息
|-> head_buf_pop(&bhdr, &shdr, &fhdr); //将cpio头部信息后面的数据放到另外的缓存区,供升级使用
|-> ota_buf_push(&bhdr, buffer, length); //将下载的数据放到缓存区,供升级使用
|-> aic_ota_find_part(partname); //获取分区信息
|-> aic_ota_erase_part(); //擦除分区
|-> download_buf_pop(&bhdr, &fhdr) //将缓存区里面的数据取出来,升级到flash上
|-> aic_ota_part_write //写入数据到flash上
|-> cpio_file_checksum((unsigned char *)bhdr->buf, burn_len); //升级完成以后,校验和信息
|-> aic_upgrade_end(); //升级结束,更新环境变量信息
|-> cmd_reboot(0, NULL); //重启
10、SPINAND 平台 boot 阶段新系统程序加载启动流程
do_nand_boot //application/baremetal/bootloader/cmd/nand_boot.c
|-> aic_ota_check(); //application/baremetal/bootloader/lib/absystem/absystem.c
|-> aic_ota_version_fallback(); // OTA 升级失败,版本回退到之前的版本
|-> aic_get_os_to_startup(target); //获取新系统信息
|-> mtd_get_device(target); // 获取新系统 os 分区结构体
|-> spl_load_simple_fit(&info, &entry_point); // 加载 os 分区程序到缓存上
Model4的OTA功能为用户提供了极大的便利,使得固件更新变得更加简单快捷。通过遵循上述使用指南和注意事项,用户可以轻松完成OTA升级并享受最新的功能和性能提升。启明智显将持续为用户提供优质的产品和服务,助力各行各业实现智能化升级。