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
原文地址:https://www.cnblogs.com/richard-xiong/p/9674925.html