189 lines
3.7 KiB
Markdown
189 lines
3.7 KiB
Markdown
|
||||
|
|
## 1. 系统升级流程
|
|||
|
|
|
|||
|
|
当 U 盘中存在 `update.zip` 时,执行以下流程:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
update.zip
|
|||
|
|
↓
|
|||
|
|
读取压缩包内容(不解压)
|
|||
|
|
↓
|
|||
|
|
判断根目录是否存在 ValidationFile.ini
|
|||
|
|
├── 存在
|
|||
|
|
│ ↓
|
|||
|
|
│ 按新版签名包处理
|
|||
|
|
│ ↓
|
|||
|
|
│ 解压
|
|||
|
|
│ ↓
|
|||
|
|
│ 校验内层 update.zip 与 ValidationFile.ini
|
|||
|
|
│ ↓
|
|||
|
|
│ 校验通过后升级内层 update.zip
|
|||
|
|
│
|
|||
|
|
└── 不存在
|
|||
|
|
↓
|
|||
|
|
按旧版标准 升级包处理
|
|||
|
|
↓
|
|||
|
|
直接解析并升级原始 update.zip
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 说明
|
|||
|
|
|
|||
|
|
- `update.zip` 为系统升级包;
|
|||
|
|
|
|||
|
|
- 使用 Java `ZipFile` 接口读取压缩包内容,不进行解压;
|
|||
|
|
|
|||
|
|
- 判断压缩包内部是否包含 `ValidationFile.ini`;
|
|||
|
|
|
|||
|
|
- 若存在 `ValidationFile.ini`:
|
|||
|
|
|
|||
|
|
- 认为该文件是新版签名升级包;
|
|||
|
|
|
|||
|
|
- 解压升级包;
|
|||
|
|
|
|||
|
|
- 对解压后的内层 `update.zip` 和 `ValidationFile.ini` 执行签名/完整性校验;
|
|||
|
|
|
|||
|
|
- 校验通过后开始升级内层 `update.zip`;
|
|||
|
|
|
|||
|
|
- 校验失败时升级失败,不得回退到旧版直接升级流程;
|
|||
|
|
|
|||
|
|
- 若不存在 `ValidationFile.ini`:
|
|||
|
|
|
|||
|
|
- 认为该文件是旧版标准 升级包;
|
|||
|
|
|
|||
|
|
- 不解压、不执行新增签名校验;
|
|||
|
|
|
|||
|
|
- 直接解析原始 `update.zip` 并执行系统升级基础校验;
|
|||
|
|
|
|||
|
|
- 基础校验通过后开始升级。
|
|||
|
|
|
|||
|
|
### 系统升级包结构
|
|||
|
|
|
|||
|
|
旧版标准 升级包:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
U盘/update.zip
|
|||
|
|
├── payload.bin
|
|||
|
|
├── payload_properties.txt
|
|||
|
|
└── META-INF/com/android/metadata
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
新版签名升级包:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
U盘/update.zip
|
|||
|
|
├── update.zip
|
|||
|
|
└── ValidationFile.ini
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. MCU 升级流程
|
|||
|
|
|
|||
|
|
### 2.1 update_mcu.zip 升级
|
|||
|
|
|
|||
|
|
当 U 盘中存在 `update_mcu.zip` 时,执行以下流程:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
update_mcu.zip
|
|||
|
|
↓
|
|||
|
|
解压
|
|||
|
|
↓
|
|||
|
|
校验
|
|||
|
|
↓
|
|||
|
|
升级
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 说明
|
|||
|
|
|
|||
|
|
- `update_mcu.zip` 为 MCU 压缩升级包;
|
|||
|
|
|
|||
|
|
- 解压后执行校验;
|
|||
|
|
|
|||
|
|
- 校验通过后开始 MCU 升级。
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.2 cortex-gdm4.bin 升级
|
|||
|
|
|
|||
|
|
当 U 盘中存在 `cortex-gdm4.bin` 时,执行以下流程:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
cortex-gdm4.bin
|
|||
|
|
↓
|
|||
|
|
直接升级
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 说明
|
|||
|
|
|
|||
|
|
- `cortex-gdm4.bin` 为 MCU 二进制升级文件;
|
|||
|
|
|
|||
|
|
- 不进行解压及校验;
|
|||
|
|
|
|||
|
|
- 直接执行 MCU 升级。
|
|||
|
|
|
|||
|
|
### 2.3 MCU 文件优先级
|
|||
|
|
|
|||
|
|
当同一个 U 盘中同时存在 `update_mcu.zip` 和 `cortex-gdm4.bin` 时:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
优先使用 update_mcu.zip
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 说明
|
|||
|
|
|
|||
|
|
- `update_mcu.zip` 带签名/完整性校验,安全性更高;
|
|||
|
|
|
|||
|
|
- `cortex-gdm4.bin` 仅用于兼容旧版 MCU 升级方式;
|
|||
|
|
|
|||
|
|
- 若两者同时存在,默认按新版 `update_mcu.zip` 流程处理。
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. MCU 文件识别规则
|
|||
|
|
|
|||
|
|
|文件名称|处理方式|
|
|||
|
|
|---|---|
|
|||
|
|
|update_mcu.zip|解压 → 校验 → 升级|
|
|||
|
|
|cortex-gdm4.bin|直接升级|
|
|||
|
|
|其它文件|不处理|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 整体流程汇总
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
系统升级:
|
|||
|
|
|
|||
|
|
update.zip
|
|||
|
|
↓
|
|||
|
|
读取 ZIP 内容(不解压)
|
|||
|
|
↓
|
|||
|
|
根目录是否存在 ValidationFile.ini?
|
|||
|
|
├── 是 → 新版签名包 → 解压 → 校验内层 update.zip → 升级内层 update.zip
|
|||
|
|
└── 否 → 旧版标准 升级 包 → 直接解析并升级原始 update.zip
|
|||
|
|
|
|||
|
|
|
|||
|
|
MCU升级:
|
|||
|
|
|
|||
|
|
① update_mcu.zip
|
|||
|
|
↓
|
|||
|
|
解压
|
|||
|
|
↓
|
|||
|
|
校验
|
|||
|
|
↓
|
|||
|
|
升级
|
|||
|
|
|
|||
|
|
② cortex-gdm4.bin
|
|||
|
|
↓
|
|||
|
|
直接升级
|
|||
|
|
|
|||
|
|
说明:
|
|||
|
|
|
|||
|
|
- 系统升级中,只要检测到 `ValidationFile.ini`,就必须完成签名校验;
|
|||
|
|
- 签名校验失败时,不允许回退为旧版直接升级;
|
|||
|
|
- MCU 升级中,`update_mcu.zip` 优先级高于 `cortex-gdm4.bin`;
|
|||
|
|
- `cortex-gdm4.bin` 仅作为旧版 MCU 升级兼容路径保留。
|
|||
|
|
```
|