系统 OTA 升级
概述
OTA :( Over-the-Air Technology,空中下载技术)是指通过无线网络实现远程软件升级的技术。最早由安卓系统引入到手机设备中, OTA 技术大幅简化了传统软件升级过程,无需通过计算机连接设备,用户可直接在设备上下载并安装更新。这一技术极大地方便了用户,提高了设备维护的效率。
- 在 OTA 的广义应用中,可以划分为云端和设备端两个主要 组成部分。云端部分负责处理设备的升级请求,包括执行升级校验、下发升级包以及收集升级结果等任务。而设备端则主要依赖云端下发的升级包,完成系统软件( FOTA, Firmware Over-the-Air)或应用程序( SOTA, Software Over-the-Air)的更新与升级。
- 本文旨在提供底层设备端 OTA 的用户手册,详细阐述 OTA 在底层系统软件和应用程序升级中的机制及其实现方法,同时提供相关的开发指导。需要特别指出的是,通过 OTA 升级的系统软件与应用程序,主要是指更新存储在外部存储器(如 eMMC )中的数据。
- OTA 的对外交付物主要为一套 API 及其相应的实现库(如 libupdate.so),该库实现了底层烧写校验等关键功能。上层的 OTA 服务架构则由客户方实现,用以对接客户的云端服务。在成功从云端下载升级包后, OTA 服务会通过调用 libupdate.so 中的接口,实现版本的升级和校验等操作,从而确保设备能够顺利、安全地完成软件更新。
缩略语
| 缩略语 | 英文全称 | 中文解释 |
|---|---|---|
| SoC | System on Chip | 片上系统 |
| BL[x] | Boot Loader Stage [x] | 启动的阶段 x |
| SPL | Secondary Program Loader | 二级程序加载器 |
| GPT | GUID Partition Table | GUID 磁盘分区表 |
| GUID | Globally Unique IDentifier | 全局唯一标识符 |
| RSA | RSA Algorithm | RSA 公开密钥密码体制 |
| eMMC | embedded MultiMedia Card | 嵌入式非易失性存储器 |
系统分区表
OTA 时,将以分区为单位对目标分区进行更新,这些分区按照不同的类型做如下区分:
| 分区类型 | 属性 | 升级方式 | 举例 |
|---|---|---|---|
| 持久化分区 | 参数分区:一般存储系统运行时需要加载的一些配置文件和参数等数据。如分区表中的 ubootenv 等 用户分区:指与系统启动无关的分区。一般在系统启动后才会被挂载,如 userdata 分区 | 单分区一般没有镜像, 分区数据需要长期保存, 不支持 OTA 升级。 | ubootenv, veeprom, userdata |
| AB 分区 | 前缀同名且尾缀带 _a 和 _b 的分区称做 AB 分区。 | AB 分区交替升级。 | boot_a, boot_b |
| BAK 分区 | 前缀同名且尾缀带bak的分区称作 BAK 分区,主要构成为 1 个主分区和若干个备份分区。 | BAK 分区只升级主分区,主分区升级并验证成功后,将主分区内容同步到备份分区。 | SBL, SBL_bak |
开启 OTA
RDK 默认不开启 OTA 功能,如需开启请按如下流程操作:
-
开启 OTA 前,若未编译过工程,没有生成 out 目录则执行下列命令,必须先编译工程或者建立编译环境。
# 编译工程,生成镜像
sudo ./pack_image.sh
# 仅建立编译环境
sudo ./pack_image.sh -p -
配置 build_params 中对应平台的 conf 文件:
将
build_params目录下的ubuntu-22.04_desktop_rdk-s100_beta.conf和ubuntu-22.04_desktop_rdk-s100_release.conf中的PARTITION_FILE配置为 OTA 版本:export PARTITION_FILE="s100-ota-gpt.json",RDK_DM_VERIFY_ENABLE配置为开启:export RDK_DM_VERIFY_ENABLE="yes";将
build_params目录下的ubuntu-24.04_desktop_rdk-s600_beta.conf、ubuntu-24.04_server_rdk-s600_beta.conf、ubuntu-24.04_desktop_rdk-s600_release.conf和ubuntu-24.04_server_rdk-s600_release.conf(可根据情况只修改用到的 conf)中的PARTITION_FILE配置为 OTA 版本:export PARTITION_FILE="s600-ota-gpt.json",RDK_DM_VERIFY_ENABLE配置为开启:export RDK_DM_VERIFY_ENABLE="yes"; -
配置对应平台 board mk 文件中的
RDK_OTA变量:将
source/bootloader/device/rdk/s100目录下的board_s100_debug.mk和board_s100_release.mk文件中的RDK_OTA变量配置为开启export RDK_OTA="yes";将
source/bootloader/device/rdk/s600目录下的board_s600_debug.mk和board_s600_release.mk文件中的RDK_OTA变量配置为开启export RDK_OTA="yes"; -
编译
- 制作新的 miniboot 的 deb 包
./mk_debs.sh hobot-miniboot - 重新编译本地镜像
sudo ./pack_image.sh -l
- 制作新的 miniboot 的 deb 包