zoukankan      html  css  js  c++  java
  • RT600 Boot详解

    本文详细介绍RT600 ROM的boot 流程,具体如下

    1. image的架构解析
    2. ROM如何从device中读取数据,进行boot

    image 架构

    image header中前4byte是PC。ROM用到的数据位于0x20-0x40.

    从这张图中,我们可以看到:

    • 0x20-0x23为image的总长度
    • 0x24-0x27为image type。具体请参见下图
    • 0x28-0x2b为CRC checksum或者authentication block address。
      1. 如果image不签名,这里的数值就是CRC checksum,ROM boot时会计算image的checksum跟这个值进行对比,通过则boot
      2. 如果image签名,则此处为signature的offset。如果image中包含key store,signature的具体位置需要将这个值加上0x5B0。因为ROM处理image的时候会去除HMAC + key store,将image直接附在header的后面。
    • 0x34-0x37,image运行地址.
      1. 如果是XIP,这个地址跟存储地址一致
      2. 如果non-xip,ROM会从存储地址中将数据copy到这个地址

    image type定义

    • bit15定义了image中是否带有key store
    • bit14定义了是否使用trustzone
    • bit13定义了trust zone boot是否带preset data
    • bit7-bit0定义了image的类型。
      如果image运行在RAM中,则HMAC会使用到。制作image的时候,需要使用user key对image header进行加密,加密的数据存储到HMAC中。
      Boot的时候,ROM会使用user key store来对其进行校验。如果image中定义了key store,则从image从获取key store。否则从存储device的offset 0x800处取key store

    boot 流程详解

    如果image运行在RAM中,并且签名。制作image的时候,需要使用user key对header进行加密,加密的数据就是HMAC。
    XIP secure boot跟normal RAM boot没有HMAC

    • ROM解析image header,判断image运行在ram中还是XIP。如果image运行在RAM中,ROM拷贝0x40数据到RAM中,否则不拷贝。拷贝的0X40长度的数据就是image header,ROM会根据image header的信息对image进行处理
    • ROM根据image header中的信息,将image header跟HMAC拷贝到image运行位置。
      1. 如果image运行在RAM中,并且image中带有key store。ROM会使用image中的key store对HMAC进行校验
      2. 如果image运行在RAM中,并且image中没有key store。ROM会从boot device的offset 0x800处获取key store,对HMAC进行校验
      3. 针对运行在RAM中的image,HMCA校验通过后进行下一步,否则ROM lock up。HMCA的校验,需要在fuse boot_CFG[0] bit[9]开启use PUF
    • ROM拷贝剩余的image,附在header后面
      1. 如果image中包含key store, ROM剔除key store(0x590)+ HMAC(0x20)长度后将数据复制到header后。
    • 如果image加密,则解密后进行认证
    • 认证通过后获取PC,然后jump to application
  • 相关阅读:
    hibernate映射-单向多对一映射
    CSS
    HTML基础
    复习
    元类,单例
    数据类型,约束,存储引擎
    数据库概念,安装,基本操作
    IO模型
    异步回调,协程
    GIL锁,线程池,同步异步
  • 原文地址:https://www.cnblogs.com/richard-xiong/p/9674925.html
Copyright © 2011-2022 走看看