Full Package

全量包 - 完整固件镜像

定义

Full Package(全量包)是 OTA 升级时下发的完整固件镜像,适用于任意版本升级,不依赖当前版本。体积较大但兼容性好,与 Delta Package 增量包互补。

适用场景

全量包适用于:设备版本分散、无法为每个源版本生成增量包;首次量产设备或从零升级;增量包合并失败需兜底;存储空间充足、带宽可接受的场景。相比 Delta Package,全量包无需关心源版本,一次构建即可覆盖所有设备,简化版本管理。

传输与存储

全量包体积通常为数 MB 至数十 MB,需支持断点续传、分片下载以应对网络不稳定。设备端需预留足够存储空间(A/B Partition 时需双倍空间),下载完成后进行 Firmware Signature 校验,通过后方可写入并重启。

与 FOTA 流程结合

在 FOTA 流程中,平台可根据设备上报的当前版本智能选择全量包或增量包;当无匹配增量包时自动使用全量包。支持 Gray Release 灰度发布、Maintenance Window 维护窗口,全量包与增量包均需经签名与完整性校验,确保升级安全。

整包镜像不依赖旧版本

全量包的技术含义是:这一份字节本身就是可启动的完整映像,写进去之后不需要和设备上残留的旧文件拼接。它因此不关心设备现在跑的是哪一个中间版本,只要硬件和产品范围匹配,就可以作为目标。代价是体积通常覆盖整个映像,下载时间和存储占用都按整包计算,而不是按改动行数计算。包里应带有明确的目标版本、适用硬件以及完整性材料,设备在覆盖写入前先核验这些材料。和差分相比,全量包的构建物更少:不必为每一对源版本和目标版本都产生一个补丁。它也不能被理解成“把目录里所有文件原样打包而不管启动布局”,启动所需的分区表、引导相关镜像和版本标记必须一起在包内,否则设备写入后无从启动。空中升级任务选择全量包时,应把整包哈希与任务绑定,避免下载过程中被换成另一份同样大小的文件。

版本散乱时才值得用整包

全量包适合用在这些场合:现场版本已经分叉,无法为每个源版本都准备差分;设备是首次从产线空片或维修后的空白分区启动;差分合成在设备上失败,需要一条不依赖旧内容的退路;存储和带宽都留得下整包,并且业务允许相应的下载时长。若绝大多数设备都停在同一个已知版本,仍强制每次下发整包,窄带链路会被长时间占用,休眠设备也可能等不到传完。选择应发生在任务生成时,依据设备上报的当前版本和可用空间,而不是所有设备共用一个“永远整包”的开关。空间不够双份映像时,不能假定覆盖写仍然安全。回滚若承诺回到旧版本,旧映像必须还在另一分区或可再次下载,不能以为整包写过一次就自然留有退路。

空间、布局和版本标记被忽略

容易出错的是按压缩包大小估算设备空间,解压或写入分区之后超出预留,写到一半失败,旧映像也被破坏。另一类是整包里的版本标记和文件头不一致,设备启动的是新映像,上报的仍是旧版本号,平台会反复下发。差分失败后自动改下全量包,却没有重新做签名和硬件匹配,把别的硬件的整包送了下去。断点续传的分片序号在整包更新后未作废,设备把新旧分片拼成一份无法启动的镜像。只校验文件大小、不校验哈希,链路损坏的包被当成完整。引导镜像不在整包范围内,应用升级了、引导仍是不兼容的旧版,表现为随机无法启动。任务成功条件只看字节下完,没有看设备是否从新分区完成了一次上报。整包的写入地址和启动顺序应写在发布说明里,只给一个压缩包名称时,设备无法判断该落在哪一个分区,失败也分不清是包错还是地址错。

相关术语

返回设备管理平台专业术语