07- Firmware Update (FWU)

引流关键词: 中断、同步异常、异步异常、irq、fiq、BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33,SCP_BL1,SCP_BL2,BL0,BL30, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表…

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈


[专栏目录]-ATF/FF-A/specification学习

请添加图片描述


7.固件更新 (FWU)

7.1。介绍

本文档描述了固件更新 (FWU) 功能的设计,该功能使经过身份验证的固件能够将固件映像从外部接口(例如 USB、UART、SD-eMMC、NAND、NOR 或以太网)更新到 SoC 非易失性存储器(例如 NAND 闪存) , LPDDR2-NVM 或平台决定的任何内存。即使系统中的当前固件损坏或丢失,此功能仍然有效;因此,它可以用作恢复模式。它也可以由其他更高级别的固件更新软件来补充。

FWU 实现了受信任板引导要求 (TBBR) 规范 Arm DEN0006C-1 的特定部分。它应该与 Trusted Board Boot设计文档结合使用,该文档描述了 Trusted Firmware-A (TF-A) TBBR 实现的映像认证部分。

7.1.1. 范围

本文档描述了安全世界 FWU 设计。描述正常的世界 FWU 图像应该如何操作超出了它的范围。要实现普通世界的 FWU 映像,请参阅 TBBR 中的“非可信固件更新程序”要求。

7.2. FWU 概述

FWU 引导流程主要由 BL1 调节。由于 BL1 在 ROM 中执行,并且通常希望最大限度地减少 ROM 代码的数量,因此该设计允许 FWU 的某些部分在其他安全和正常的世界映像中实现。平台代码可以选择在哪些图像中实现哪些部分,但一般期望是:

  • BL1 handles:
    检测和启动 FWU 引导流程。
    将图像从非安全内存复制到安全内存
    FWU 图像认证
    FWU 过程中正常世界和安全世界之间的上下文切换。

  • 其他安全世界 FWU 映像处理 FWU 进程所需的平台初始化。

  • 正常世界的 FWU 映像处理将固件映像从外部接口加载到非安全内存。

FWU 功能的主要要求是:

  • (1)导出 BL1 SMC 接口以与在其他异常级别执行的其他 FWU 映像进行互操作。
  • (2)导出平台接口以向 FWU 通用代码提供所需的信息,并启用平台特定的 FWU 功能。有关此接口的详细信息,请参阅 移植指南。

与其他 TF-A 图像一样,TF-A 对 FWU 图像使用缩写图像术语。有关这些术语的解释,请参阅图像术语文档。

下图显示了 Arm 开发平台的 FWU 引导流程。像 Juno 这样的 Arm CSS 平台有一个系统控制处理器 (SCP),这些平台使用所有定义的 FWU 图像。其他平台可能会使用其中的一个子集。

流程图

7.3. 镜像识别

每个 FWU 图像和证书都由平台定义的唯一 ID 标识,BL1 使用该 IDimage_desc_t通过调用bl1_plat_get_image_desc(). 相同的 ID 还用于准备信任链(有关更多信息,请参阅身份验证框架和信任链 文档)。

镜像描述符包括以下信息:

  • 可执行或不可执行的图像。这表示是否允许普通世界请求执行安全世界 FWU 映像(在认证之后)。安全世界证书和非 AP 映像是不可执行映像的示例。

  • 安全或非安全图像。这指示图像是否在安全或非安全内存中进行身份验证/执行。

  • 图像基址和大小。

  • 图像入口点配置 (an entry_point_info_t)。

  • FWU 图像状态。

BL1 使用 FWU 图像描述符来:

  • 验证 FWU SMC 的论点

  • 管理 FWU 进程的状态

  • 初始化下一个 FWU 镜像的执行状态。

7.4. FWU 状态机

BL1 在 FWU 执行期间维护每个 FWU 映像的状态。较低异常级别的 FWU 映像会引发 SMC 以调用 BL1 中的 FWU 功能,这会导致 BL1 更新其 FWU 映像状态。BL1 图像状态和有效状态转换如下图所示。请注意,安全图像比非安全图像具有更复杂的状态机。

FWU 状态机

以下是支持的状态的简要说明:

  • RESET:这是 FWU 开始时每个图像的初始状态。身份验证失败也会导致此状态。如果安全映像已完成执行,则它可能会屈服于此状态。也可以使用FWU_SMC_IMAGE_RESET.

  • COPYING:这是安全映像的状态,而 BL1 将其以块的形式从非安全内存复制到安全内存。

  • COPIED:这是当 BL1 完成将其复制到安全内存时安全映像的状态。

  • AUTHENTICATED:这是 BL1 成功验证图像时的状态。

  • EXECUTED:当 BL1 将执行控制权交给它时,这是一个安全的可执行映像的状态。

  • INTERRUPTED:这是一个安全的可执行映像在请求 BL1 恢复正常世界执行后的状态。

7.5。BL1 SMC 接口

7.5.1. BL1_SMC_CALL_COUNT
Arguments:
    uint32_t function ID : 0x0

Return:
    uint32_t

此 SMC 返回 BL1 支持的 SMC 数量。

7.5.2. BL1_SMC_UID
Arguments:
    uint32_t function ID : 0x1

Return:
    UUID : 32 bits in each of w0-w3 (or r0-r3 for AArch32 callers)

此 SMC 返回 BL1 SMC 服务的 128 位通用唯一标识符。

7.5.3. BL1_SMC_VERSION
Argument:
    uint32_t function ID : 0x3

Return:
    uint32_t : Bits [31:16] Major Version
               Bits [15:0] Minor Version

此 SMC 返回 BL1 SMC 服务的当前版本。

7.5.4. BL1_SMC_RUN_IMAGE
Arguments:
    uint32_t           function ID : 0x4
    entry_point_info_t *ep_info

Return:
    void

Pre-conditions:
    if (normal world caller) synchronous exception
    if (ep_info not EL3) synchronous exception

此 SMC 将执行控制传递给由提供的 entry_point_info_t结构描述的 EL3 映像。在正常的 TF-A 引导流程中,BL2 为 BL1 调用此 SMC 以将执行控制权传递给 BL31。

7.5.5。FWU_SMC_IMAGE_COPY
Arguments:
    uint32_t     function ID : 0x10
    unsigned int image_id
    uintptr_t    image_addr
    unsigned int block_size
    unsigned int image_size

Return:
    int : 0 (Success)
        : -ENOMEM
        : -EPERM

Pre-conditions:
    if (image_id is invalid) return -EPERM
    if (image_id is non-secure image) return -EPERM
    if (image_id state is not (RESET or COPYING)) return -EPERM
    if (secure world caller) return -EPERM
    if (image_addr + block_size overflows) return -ENOMEM
    if (image destination address + image_size overflows) return -ENOMEM
    if (source block is in secure memory) return -ENOMEM
    if (source block is not mapped into BL1) return -ENOMEM
    if (image_size > free secure memory) return -ENOMEM
    if (image overlaps another image) return -EPERM

此 SMC 将指示的安全映像image_id从非安全内存复制到安全内存以供以后验证。可以将图像复制到单个块或多个块中。image_size在任何一种情况下,第一次为每个图像调用此 SMC 时都必须提供图像的总大小;在后续调用(如果有)相同图像时会忽略它。

image_addr并指定要从中复制的block_size源内存块。目标地址由平台代码提供。

如果block_size大于此图像要复制的剩余字节数,则前者将被截断为后者。然后认为复制操作完成,并且 FWU 状态机转换到“COPIED”状态。如果还有更多要复制,则 FWU 状态机保持或转换到 COPYING 状态(取决于先前的状态)。

当使用多个块时,源块不一定需要在连续的内存中。

一旦 SMC 被处理,BL1 从异常返回到正常的世界调用者。

7.5.6。FWU_SMC_IMAGE_AUTH
Arguments:
    uint32_t     function ID : 0x11
    unsigned int image_id
    uintptr_t    image_addr
    unsigned int image_size

Return:
    int : 0 (Success)
        : -ENOMEM
        : -EPERM
        : -EAUTH

Pre-conditions:
    if (image_id is invalid) return -EPERM
    if (secure world caller)
        if (image_id state is not RESET) return -EPERM
        if (image_addr/image_size is not mapped into BL1) return -ENOMEM
    else // normal world caller
        if (image_id is secure image)
            if (image_id state is not COPIED) return -EPERM
        else // image_id is non-secure image
            if (image_id state is not RESET) return -EPERM
            if (image_addr/image_size is in secure memory) return -ENOMEM
            if (image_addr/image_size not mapped into BL1) return -ENOMEM

此 SMC 对 指定的图像进行身份验证image_id。如果图像处于 RESET 状态,则 BL1 使用提供的 image_addr和对图像进行就地身份验证image_size。如果图像是处于复制状态的安全图像,则 BL1 从 BL1 先前将图像复制到的安全存储器中验证图像。

BL1 从异常返回给调用者。如果验证成功,则 BL1 将图像状态设置为 AUTHENTICATED。如果身份验证失败,则 BL1 返回 -EAUTH 错误并将图像状态设置回 RESET。

7.5.7。FWU_SMC_IMAGE_EXECUTE
Arguments:
    uint32_t     function ID : 0x12
    unsigned int image_id

Return:
    int : 0 (Success)
        : -EPERM

Pre-conditions:
    if (image_id is invalid) return -EPERM
    if (secure world caller) return -EPERM
    if (image_id is non-secure image) return -EPERM
    if (image_id is non-executable image) return -EPERM
    if (image_id state is not AUTHENTICATED) return -EPERM

image_id此 SMC在另一个安全世界中向调用者启动执行由 指定的先前经过身份验证的映像 。当前实现仅支持普通世界调用者启动安全世界图像的执行。

BL1 保存普通世界调用者的上下文,将安全映像状态设置为 EXECUTED,并从异常返回到安全映像。

7.5.8。FWU_SMC_IMAGE_RESUME
Arguments:
    uint32_t   function ID : 0x13
    register_t image_param

Return:
    register_t : image_param (Success)
               : -EPERM

Pre-conditions:
    if (normal world caller and no INTERRUPTED secure image) return -EPERM

当安全映像处于 EXECUTED/INTERRUPTED 状态时,此 SMC 将在另一个安全世界中恢复执行。

对于普通世界调用者,BL1 将先前中断的安全映像状态设置为 EXECUTED。对于安全世界调用者,BL1 将先前执行的安全映像状态设置为 INTERRUPTED。在任何一种情况下,BL1 都会保存调用世界的上下文,恢复正在恢复的世界的上下文并从异常返回到正在恢复的世界。如果调用成功,则将提供的调用者 image_param返回到恢复的世界,否则将错误代码返回给调用者。

7.5.9。FWU_SMC_SEC_IMAGE_DONE
Arguments:
    uint32_t function ID : 0x14

Return:
    int : 0 (Success)
        : -EPERM

Pre-conditions:
    if (normal world caller) return -EPERM

此 SMC 指示先前执行的安全映像的完成。

BL1 将先前执行的安全映像状态设置为 RESET 状态,恢复正常世界上下文并从异常返回到正常世界。

7.5.10。FWU_SMC_UPDATE_DONE

Arguments:
uint32_t function ID : 0x15
register_t client_cookie

Return:
N/A
此 SMC 完成固件更新过程。BL1 调用平台特定函数bl1_plat_fwu_done,将可选参数client_cookie作为. SMC 不返回。void *

7.5.11。FWU_SMC_IMAGE_RESET
Arguments:
    uint32_t     function ID : 0x16
    unsigned int image_id

Return:
    int : 0 (Success)
        : -EPERM

Pre-conditions:
    if (secure world caller) return -EPERM
    if (image in EXECUTED) return -EPERM

此 SMC 将图像的状态设置为 RESET 并将其使用的内存归零。

仅当未执行图像时才允许这样做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值