定义
FOTA(Firmware Over-The-Air)即固件空中升级,是 OTA 的一种形式,专门用于通过无线方式下发固件包,实现设备固件更新。支持 Full Package、Delta Package、Gray Release、Rollback 等能力。
升级流程
FOTA 典型流程:平台创建升级任务、选择目标设备与版本、下发升级通知;设备拉取固件包(支持断点续传)、校验 Firmware Signature 签名、写入存储(A/B Partition 时写入空闲分区);重启切换、验证新版本运行正常后上报成功。失败时可触发 Rollback 回滚至旧版本。
包类型与策略
支持 Full Package 全量包(适用任意版本升级)与 Delta Package 增量包(体积小、需指定源版本)。通过 Gray Release 灰度发布,可先对部分设备推送验证,再逐步扩大;支持 Maintenance Window 维护窗口内的定时升级,降低业务影响。
安全与可靠性
固件需经 Firmware Signature 签名,设备端校验通过方可执行;支持升级包加密传输。结合 A/B Partition 可降低变砖风险;平台应记录升级进度、成功率、失败原因,支持重试与回滚策略配置。
换映像和改参数不是同一类动作
固件空中升级更换的是设备赖以启动和运行的程序映像。动作包括通知、下载、校验、写入非活动区或备份区、重启,以及确认新版本确实已经跑起来。它和改一个运行参数不同:参数通常可以回读,也常常能在不重启的情况下生效;映像写坏或与硬件不匹配,设备可能再也无法自己连回平台。因此任务必须知道当前版本、目标版本、包所适用的产品和硬件,以及失败后应回到哪一个已知可用的版本。版本顺序不能只靠字符串大小来比,带次版本号的编号谁新谁旧要有明确规则。下载中断应能从已完成的分片继续,而不是每次都从头占满窄带。平台上的“已下载”只说明字节到达;设备影子里的固件版本被报成新值,才说明设备认为自己正在运行这版映像。
允许启动换映像的设备状态
开任务之前,设备应处在设计允许的状态:供电足够撑过下载和重启,存储放得下新包以及回退需要的旧映像,业务也允许一次短时重启。正在做不可中断动作的设备应推迟,而不是被强制重启。包、硬件和当前版本三者匹配,才进入下载;匹配不上应给出明确的失败原因,而不是下载完才在设备上发现。灰度还没结束的版本,不应被另一个全量任务同时盖掉。已经配置了维护时段的,时段之外的强制升级要有单独的授权。链路差时优先体积更小的差分,超时要和休眠周期相称。签名核验失败必须停住,不能为了先升上去而临时跳过。升级程序自身若也在被替换的映像里,新程序仍要能继续回报状态,否则平台会永远停在“正在重启”。经MQTT发出的通常只是通知和进度,包体走单独的下载通道,两边的设备身份应当是同一个。
版本顺序和分区标记被写错
用展示名称做大小比较时,带字母后缀或日期的版本会被排错,旧包被当成更新推下去。差分所依据的基线与设备实际运行的版本不一致仍继续拼接,会写出无法启动的映像。分区只写入了新的一侧、还没确认就切换,回退标记丢失,下次断电无法返回。把“下载完成”映射成“升级成功”之后,观察就停了,设备其实卡在重启。两个任务同时存在时,后一个会清掉前一个的分区标记。电量只在创建任务时看一次,下载持续数小时后已经不够重启。失败重试不设上限,窄带设备被反复唤醒,电池被耗尽。完成标准里没有业务侧的自检,程序进程起来了,关键外设却初始化失败,仍被记成完成。