MCUboot 中的 BOOT_SWAP_TYPE_PERM 功能先容

打印 上一主题 下一主题

主题 1666|帖子 1666|积分 4998

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录

概述
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。其具体布局如下:
  1. 0                   1                   2                   3
  2.      0 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
  3.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4.     ~                                                               ~
  5.     ~    Swap status (BOOT_MAX_IMG_SECTORS * min-write-size * 3)    ~
  6.     ~                                                               ~
  7.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8.     |                 Encryption key 0 (16 octets) [*]              |
  9.     |                                                               |
  10.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  11.     |                    0xff padding as needed                     |
  12.     |  (BOOT_MAX_ALIGN minus 16 octets from Encryption key 0) [*]   |
  13.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  14.     |                 Encryption key 1 (16 octets) [*]              |
  15.     |                                                               |
  16.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  17.     |                    0xff padding as needed                     |
  18.     |  (BOOT_MAX_ALIGN minus 16 octets from Encryption key 1) [*]   |
  19.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  20.     |                      Swap size (4 octets)                     |
  21.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  22.     |                    0xff padding as needed                     |
  23.     |        (BOOT_MAX_ALIGN minus 4 octets from Swap size)         |
  24.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  25.     |   Swap info   |  0xff padding (BOOT_MAX_ALIGN minus 1 octet)  |
  26.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  27.     |   Copy done   |  0xff padding (BOOT_MAX_ALIGN minus 1 octet)  |
  28.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  29.     |   Image OK    |  0xff padding (BOOT_MAX_ALIGN minus 1 octet)  |
  30.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  31.     |                    0xff padding as needed                     |
  32.     |         (BOOT_MAX_ALIGN minus 16 octets from MAGIC)           |
  33.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  34.     |                       MAGIC (16 octets)                       |
  35.     |                                                               |
  36.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码

1.2  Swap info

   交换信息:单个字节,编码以下信息:
交换类型:0 ~ 3位存储。指示正在举行的交换操纵的类型。当MCUboot恢复被中断的交换时,它使用这个字段来确定要执行的操纵类型。该字段包含下表中下列值之一。
  
图像号:存储在4-7位。它在单映像引导时总是0值。在多映像引导的环境下,它指示中断发生时交换了哪个映像。在所有图像交换操纵期间使用雷同的划痕地区。因此使用该字段
  NameValueBOOT_SWAP_TYPE_TEST2BOOT_SWAP_TYPE_PERM3BOOT_SWAP_TYPE_REVERT4 2 BOOT_SWAP_TYPE_PERM 功能

2.1 功能定义

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

  • 永久性确认:新固件已通过测试验证并被确认为稳定版本
  • 不可逆操纵:一旦设置为 PERM 状态,通常无法简单回退
  • 启动确定性:体系将始终从新固件启动
  2.2 典范工作流程

   

  • 初始状态:体系从原固件启动
  • 测试阶段:BOOT_SWAP_TYPE_TEST 状态测试新固件
  • 确认升级:测试通过后设置为 BOOT_SWAP_TYPE_PERM
  • 永久生效:后续启动都使用新固件
  3 BOOT_SWAP_TYPE_xx的其他功能

3.1  BOOT_SWAP_TYPE_REVERT 

BOOT_SWAP_TYPE_REVERT 是 MCUboot 引导加载步伐中的一种交换类型状态,表示体系需要回退到之前的固件版本。这是固件升级安全机制的重要构成部分。
1)根本定义
   BOOT_SWAP_TYPE_REVERT 表示:
  

  • 新固件测试失败或不符合运行要求
  • 体系需要自动回退到之前的稳定版本
  • 是一种保护机制,防止设备因不良固件而"变砖"
  2) 典范触发场景
   

  • 测试固件失败:在 BOOT_SWAP_TYPE_TEST 状态下,新固件运行异常
  • 确认失败:固件自检或看门狗超时等机制检测到问题
  • 手动请求:通过特定命令请求回退操纵
  • 安全验证失败:镜像签名或完整性检查未通过
  3) 工作流程
   

  • 体系从测试固件(TEST状态)启动
  • 检测到需要回退的条件(如启动失败、运行异常等)
  • 将交换类型标记为 REVERT
  • 下次启动时,bootloader 执行回退操纵
  • 恢复使用之前的稳定固件
  3.2 三中模式的比力

特性REVERTTESTPERM目的回退到旧固件测试新固件永久使用新固件长期性临时操纵临时状态永久状态触发条件测试失败/体系异常新固件写入测试成功确认后续启动使用原固件大概转为PERM或REVERT始终使用新固件 4 使用机制

4.1 实现细节

在 MCUboot 中,BOOT_SWAP_TYPE_PERM 的实现涉及:
   

  • 镜像槽管理:通常用于 A/B 双分区体系
  • 状态标记:存储在 flash 的固定地区
  • 升级确认:通过特定命令或条件触发
  • 安全验证:升级前会验证镜像签名和完整性 
  4.2 使用场景

   

  • 正式固件发布后的永久升级
  • 通过测试验证后的固件固化
  • 需要确保设备始终使用新固件的场景
  4.3 开辟者留意事项

   

  • 设置 PERM 状态前必须确保固件稳定
  • 通常需要先颠末 TEST 状态的验证
  • 某些实现大概提供告急恢复机制
  • 需要思量电源故障等异常环境
   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表