当前位置: 首页 > news >正文

MCUboot 中的 BOOT_SWAP_TYPE_PERM 功能介绍

目录

概述

1 Image 数据结构

1.1 Image介绍

1.2  Swap info

2 BOOT_SWAP_TYPE_PERM 功能

2.1 功能定义

2.2 典型工作流程

3 BOOT_SWAP_TYPE_xx的其他功能

3.1  BOOT_SWAP_TYPE_REVERT 

3.2 三中模式的比较

4 使用机制

4.1 实现细节

4.2 使用场景

4.3 开发者注意事项


概述

BOOT_SWAP_TYPE_PERM 是 MCUboot 引导加载程序中用于表示永久性固件交换的状态标志,是固件升级流程中的关键机制之一。本文主要介绍该参数以及与之相关参数的功能和使用方法。

1 Image 数据结构

1.1 Image介绍

为了使引导加载程序能够确定当前状态以及在当前引导操作期间应该采取什么操作,它使用存储在映像闪存区域中的元数据。在交换时,其中一些元数据被临时复制到scratch区或从scratch区复制出来。这个元数据位于Inage区域的末尾,称为Image trailer。其具体结构如下:

 0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+~                                                               ~~    Swap status (BOOT_MAX_IMG_SECTORS * min-write-size * 3)    ~~                                                               ~+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                 Encryption key 0 (16 octets) [*]              ||                                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    0xff padding as needed                     ||  (BOOT_MAX_ALIGN minus 16 octets from Encryption key 0) [*]   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                 Encryption key 1 (16 octets) [*]              ||                                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    0xff padding as needed                     ||  (BOOT_MAX_ALIGN minus 16 octets from Encryption key 1) [*]   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Swap size (4 octets)                     |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    0xff padding as needed                     ||        (BOOT_MAX_ALIGN minus 4 octets from Swap size)         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   Swap info   |  0xff padding (BOOT_MAX_ALIGN minus 1 octet)  |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   Copy done   |  0xff padding (BOOT_MAX_ALIGN minus 1 octet)  |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   Image OK    |  0xff padding (BOOT_MAX_ALIGN minus 1 octet)  |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    0xff padding as needed                     ||         (BOOT_MAX_ALIGN minus 16 octets from MAGIC)           |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                       MAGIC (16 octets)                       ||                                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

1.2  Swap info

交换信息:单个字节,编码以下信息:
交换类型:0 ~ 3位存储。指示正在进行的交换操作的类型。当MCUboot恢复被中断的交换时,它使用这个字段来确定要执行的操作类型。该字段包含下表中下列值之一。


图像号:存储在4-7位。它在单映像引导时总是0值。在多映像引导的情况下,它指示中断发生时交换了哪个映像。在所有图像交换操作期间使用相同的划痕区域。因此使用该字段

NameValue
BOOT_SWAP_TYPE_TEST2
BOOT_SWAP_TYPE_PERM3
BOOT_SWAP_TYPE_REVERT4

BOOT_SWAP_TYPE_PERM 功能

2.1 功能定义

BOOT_SWAP_TYPE_PERM 表示固件镜像已经完成永久性交换,具有以下特点:

  • 永久性确认:新固件已通过测试验证并被确认为稳定版本

  • 不可逆操作:一旦设置为 PERM 状态,通常无法简单回退

  • 启动确定性:系统将始终从新固件启动

2.2 典型工作流程

  1. 初始状态:系统从原固件启动

  2. 测试阶段:BOOT_SWAP_TYPE_TEST 状态测试新固件

  3. 确认升级:测试通过后设置为 BOOT_SWAP_TYPE_PERM

  4. 永久生效:后续启动都使用新固件

BOOT_SWAP_TYPE_xx的其他功能

3.1  BOOT_SWAP_TYPE_REVERT 

BOOT_SWAP_TYPE_REVERT 是 MCUboot 引导加载程序中的一种交换类型状态,表示系统需要回退到之前的固件版本。这是固件升级安全机制的重要组成部分。

1)基本定义

BOOT_SWAP_TYPE_REVERT 表示:

  • 新固件测试失败或不符合运行要求

  • 系统需要自动回退到之前的稳定版本

  • 是一种保护机制,防止设备因不良固件而"变砖"

2) 典型触发场景

  1. 测试固件失败:在 BOOT_SWAP_TYPE_TEST 状态下,新固件运行异常

  2. 确认失败:固件自检或看门狗超时等机制检测到问题

  3. 手动请求:通过特定命令请求回退操作

  4. 安全验证失败:镜像签名或完整性检查未通过

3) 工作流程

  1. 系统从测试固件(TEST状态)启动

  2. 检测到需要回退的条件(如启动失败、运行异常等)

  3. 将交换类型标记为 REVERT

  4. 下次启动时,bootloader 执行回退操作

  5. 恢复使用之前的稳定固件

3.2 三中模式的比较

特性REVERTTESTPERM
目的回退到旧固件测试新固件永久使用新固件
持久性临时操作临时状态永久状态
触发条件测试失败/系统异常新固件写入测试成功确认
后续启动使用原固件可能转为PERM或REVERT始终使用新固件

4 使用机制

4.1 实现细节

在 MCUboot 中,BOOT_SWAP_TYPE_PERM 的实现涉及:

  1. 镜像槽管理:通常用于 A/B 双分区系统

  2. 状态标志:存储在 flash 的固定区域

  3. 升级确认:通过特定命令或条件触发

  4. 安全验证:升级前会验证镜像签名和完整性 

4.2 使用场景

  1. 正式固件发布后的永久升级

  2. 通过测试验证后的固件固化

  3. 需要确保设备始终使用新固件的场景

4.3 开发者注意事项

  1. 设置 PERM 状态前必须确保固件稳定

  2. 通常需要先经过 TEST 状态的验证

  3. 某些实现可能提供紧急恢复机制

  4. 需要考虑电源故障等异常情况

 

相关文章:

  • 2048游戏(含Python源码)
  • 大模型推理--从零搭建大模型推理服务器:硬件选购、Ubuntu双系统安装与环境配置
  • 定位理论第一法则在医疗AI编程中的应用
  • 【PaaS与AI融合】MLOps平台的架构设计
  • 【MCP Node.js SDK 全栈进阶指南】专家篇(1):MCP-SDK扩展与定制
  • 【实验笔记】Kylin-Desktop-V10-SP1麒麟系统知识 —— 开机自启Ollama
  • 软考 系统架构设计师系列知识点之杂项集萃(54)
  • 《Python星球日记》第31天:Django 框架入门
  • JAVA设计模式——(十一)建造者模式(Builder Pattern)
  • 计算机视觉与深度学习 | 图像匹配算法综述
  • 【AI论文】像素修补师(PixelHacker):具有结构和语义一致性的图像修复(Image Inpainting)
  • Redis数据结构ZipList,QuickList,SkipList
  • linux、window安装部署nacos
  • MinIO实现https访问
  • 全局过滤器与局部过滤器: Vue中的文本格式化工具
  • Linux中web服务器的部署及优化
  • 网络安全自动化:找准边界才能筑牢安全防线
  • 2024年408真题及答案
  • 学习路线(机器人软件架构)
  • Linux的web服务器的部署及优化
  • 微软通讯软件Skype正式停止运营:斥资85亿美元购入,月活用户曾超3亿
  • 新华社:赵心童世锦赛夺冠,中国书写斯诺克运动新历史
  • 印巴局势紧张之际,巴基斯坦两天内第二次进行导弹试射
  • 农村青年寻路纪|劳动者的书信⑤
  • 刘翔的赛会纪录被改写,田径钻石赛在赛场内外交出精彩答卷
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”