Versal ACAP在线升级之Boot Image格式

1、简介        

        Xilinx FPGA、SOC器件和自适应计算加速平台(ACAPs)通常由多个硬件和软件二进制文件组成,用于启动这些设备后按照预期设计进行工作。这些二进制文件可以包括FPGA比特流、固件镜像、bootloader引导程序、操作系统和用户选择的应用程序,它们可以以非安全和安全的方式进行加载。

        Bootgen是一个Xilinx工具,用于整合二进制文件并且生成设备引导镜像文件。同时Bootgen在给Xilinx设备创建boot images时,定义了输入的多种特征、属性和参数。

        Bootgen同时提供了GUI接口和命令行选项。集成到Vitis中的GUI用于生成基本的boot images,除此之外的多数Bootgen选项都是命令行驱动的。驱动Bootgen的是一个boot image format(BIF)配置文件,后缀.bif。

2、Boot Image结构

2.1 说明

        创建一个boot image包含如下两步:

(1)创建一个BIF文件;

(2)运行Bootgen可执行文件来创建一个boot image。

        Xilinx不同系列的boot image格式是不同的,这里我们只学习记录下Versal ACAP的boot image,下图是Versal ACAP boot image的组件,也被称为Programmable Device Image(PDI)。

 2.2 PMC

        Versal ACAP中的平台管理控制器主要用于boot和配置。我们重点关注的是两个PMC MicroBlaze处理器(ROM code unit(RCU) / platform processing unit(PPU))处理的boot image。

(1)RCU

        ROM code unit包含了一个三重冗余MicroBlaze处理器和一个ROM,该ROM中包含了BootROM可执行文件。BootROM可执行文件不能被改变。RCU中的MicroBlaze用于验证和运行BootROM可执行文件。RCU还负责启动后的安全监控,以及物理防克隆功能(physical unclonable function,PUF)管理

(2)PPU

        Platform processing unit也包含了一个三重冗余MicroBlaze处理器,以及一个专用的384KB大小的PPU RAM。这个MicroBlaze用于运行平台加载和管理器(platform loader and manager)。

        在Versal ACAP中,自适应引擎(PL)由rCDO和rNPI文件组成。rCDO文件主要包含CFrame数据以及PL和NoC电源域初始化命令。rNPI文件包含与NPI块相关的配置数据。NPI区块包括NoC元素:NMU、NSU、NPS、NCRB;DDR、XPHY、XPIO、GTY、MMCM等。

2.3 Versal ACAP Boot Header

        在boot image的顶部就是Boot Header:

         PMC的BootROM会使用这里的Boot Header。基于Boot Header里面的属性信息,PMC BootROM可以验证平台加载和管理器(PLM),并将PLM加载进PPU的RAM中。

        Boot Header的前16字节用于检测SelectMAP总线。PMC的BootROM和PLM会忽略这些数据,因此Bootgen在进行checksum/SHA/RSA/加密等操作时不会包含这些数据。前16字节有以下3种情况:

  • X8: [LSB] 00 00 00 DD 11 22 33 44 55 66 77 88 99 AA BB CC [MSB]

  • X16: [LSB] 00 00 DD 00 22 11 44 33 66 55 88 77 AA 99 CC BB [MSB]

  • X32: [LSB] DD 00 00 00 44 33 22 11 88 77 66 55 CC BB AA 99 [MSB]

        以实际的PDI文件为例:

         默认的SelectMAP位宽就是X32。

        Boot Header具体格式如下:

Offset (Hex)

Size (Bytes)

Description

Details

0x00

16

SelectMAP bus width

Used to determine if the SelectMAP bus width is x8, x16, or x32

0x10

4

QSPI bus width

QSPI bus width description. This is required to identify the QSPI flash in single/dual stacked or dual parallel mode. 0xAA995566 in the little endian format.

0x14

4

Image identification

Boot image identification string. Contains 4 bytes X, N, L, X in byte order, which is 0x584c4e58 in the little endian format.

0x18

4

Encryption key source

This field is used to identify the AES key source:

0x00000000

0x00000000 - Unencrypted

0xA5C3C5A3 - eFUSE red key

0xA5C3C5A5 - eFUSE black

key

0x3A5C3C5A - BBRAM red

key

0x3A5C3C59 - BBRAM black

key

0xA35C7C53 - Boot Header

black key

0x1C

4

PLM source offset

PLM source start address in PDI

0x20

4

PMC data load address

PMC CDO address to load

0x24

4

PMC data length

PMC CDO length

0x28

4

Total PMC data length

PMC CDO length including authentication and encryption overhead

0x2C

4

PLM length

PLM original image size

0x30

4

Total PLM length

PLM image size including the authentication and encryption overhead

0x34

4

Boot header attributes

Boot Header Attributes

0x38

32

Black key

256-bit key, only valid when encryption status is set to black key in boot header

0x58

12

Black IV

Initialization vector used when decrypting the black key

0x64

12

Secure header IV

Secure header initialization vector

0x70

4

PUF shutter value

Length of the time the PUF samples before it closes the

shutter

Note: This shutter value must match the shutter value that was used during PUF registration.

0x74

12

Secure Header IV for PMC

Data

The IV used to decrypt secure header of PMC data.

0x80

68

Reserved

Populate with zeroes.

0xC4

4

Meta Header Offset

Offset to the start of meta header

0xC8-0x124

96

Reserved

0x128

2048

Register init

Stores register write pairs for

system register initialization

0x928

1544

PUF helper data

PUF helper data

0xF30

4

Checksum

Header checksum

0xF34

76

SHA3 padding

SHA3 standard padding

2.4 Boot Header Attributes 

Field Name

Bit Offset

Width

Default Value

Description

Reserved

[31:18]

14

0x0

Reserved for future use, Must be 0

PUF Mode

[17:16]

2

0x0

0x3 - PUF 4K mode.

0x0 - PUF 12K mode.

Boot Header

Authentication

[15:14]

2

0x0

0x3 - Authentication of the boot image is done, excluding verification of PPK hash and SPK ID. All others -

Authentication will be decided based on eFUSE RSA/ECDSA bits.

Reserved

[13:12]

2

0x0

Reserved for future use, Must be 0

DPA counter measure

[11:10]

2

0x0

0x3 - Enabled

All others disabled.

(eFUSE over rides this)

Checksum selection

[9:8]

2

0x0

0x0, 0x1, 0x2 -

Reserved

0x3 - SHA3 is used as

hash function to do

Checksum.

PUF HD

[7:6]

2

0x0

0x3 - PUF HD is part of boot header

All other - PUF HD is in

eFUSE.

Reserved

[5:0]

6

0x0

Reserved

 2.5 Versal ACAP Image Header Table

        要找到Image Header Table,需要先在Boot Header中找到0xC4 Meta Header Offset:

         从实际的PDI 0xc4地址开始的4字节的值为0x00 0x04 0x9B 0xB0,那么Meta Header offset为0x0004_9BB0

         Image Header表内容如下:

Offset

Name

Description

0x0

Version

0x00040000(v4.0) :

1. Added AAD support for IHT.

2. Hash is included into the 32k secure chunk.

0x00030000(v3.0): updated secure chunk size to 32 KB from 64 KB

0x00020000(v2.00): IHT, PHT sizes doubled

0x4

Total Number of Images

Total number of images in the PDI

0x8

Image header offset

Address to start of first image header

0xC

Total Number of Partitions

Total number of partitions in the PDI

0x10

Partition Header Offset

Offset to the start of partitions headers

0x14

Secondary boot device address

Indicates the address where secondary image is present. This is only valid if secondary boot device is present in attributes

0x1C

Image Header Table Attributes

Refer to Table 22: Versal ACAP Image Header Table Attributes

0x20

PDI ID

Used to identify a PDI

0x24

Parent ID

ID of initial boot PDI. For boot PDI, it will be same as PDI ID

0x28

Identification string

Full PDI if present with boot header –“FPDI”

Partial/Sub-system PDI – “PPDI”

0x2C

Headers size

0-7: Image header table size in words

8-15: Image header size in words

16-23: Partition header size in words

24-31: Reserved

0x30

Total meta header length

Including authentication and encryption overhead (excluding IHT and including AC)

0x34 -0x3C

IV for encryption of meta header

IV for decrypting SH of header table

0x40

Encryption status

Encryption key source, only key source

used for PLM is valid for meta header.

0x00000000 - Unencrypted

0xA5C3C5A3 - eFuse red key

0xA5C3C5A5 - eFUSE black key

0x3A5C3C5A - BBRAM red key

0x3A5C3C59 - BBRAM black key

0xA35C7C53 - Boot Header black key

0x48

Meta Header AC Offset (Word)

Word Offset to Meta Header

Authentication Certificate

0x4c

Meta Header Black/IV

IV that is used to encrypt the Black key used to encrypt the Meta Header.

0x44 - 0x78

Reserved

0x0

0x7C

Checksum

A sum of all the previous words in the image header table

        Image Header Table Attributes表如下: 

Bit Field

Name

Description

31:14

Reserved

0

14

PUF Helper Data Location

Location of the PUF Helper Data efuse/BH

12

dpacm enable

DPA Counter Measure enable or not

11:6

Secondary boot device

Indicates the device on which rest of

the data is present in.

0 - Same boot device (default)

1 - QSPI32

2 - QSPI24

3 - NAND

4 - SD0

5 - SD1

6 - SDLS

7 - MMC

8 - USB

9 - ETHERNET

10 - PCIe

11 - SATA

12 - OSPI

13 - SMAP

14 - SBI

15 - SD0RAW

16 - SD1RAW

17 - SDLSRAW

18 - MMCRAW

19 - MMC0

20 - MMC0RAW

All others are reserved

Note: These options are supported for

various devices in Bootgen. For the

exact list of secondary boot devices

supported by any device, refer to its

corresponding Systems Software

Developers Guide (SSDG).

5:0

Reserved

         从Image Header Table的地址0x1c查到Image Header Table Attributes的4字节内容为0x0000_0000:

2.6 Versal ACAP Image Header

        要找到Image Header,需要先在Image Header Table中找到地址0x8 Image header offset的4字节内容:

         4字节内容为0x0001_270c,即Image Header是从地址0x0001_270c开始:

         Image Header内容如下:

Offset

Name

Description

0x0

First Partition Header

Word offset to first partition header

0x4

Number of Partitions

Number of partitions present for this image

0x8

Revoke ID

Revoke ID for Meta Header

0xC

Image Attributes

See Image Attributes table

0x10-0x1C

Image Name

ASCII name of the image. Max of 16 characters. Fill with Zeros when padding is required.

0x20

Image/Node ID

Defines the resource node the image is initializing

0x24

Unique ID

Defines the affinity/compatibility identifier when required for a given device resource

0x28

Parent Unique ID

Defines the required parent resource UID for the configuration content of the image, if required

0x2c

Function ID

Identifier used to capture the unique function of the image configuration data

0x30

DDR Low Address for Image Copy

The DDR lower 32-bit address where the image should be copied when memcpy is enabled in BIF

0x34

DDR High Address for Image Copy

The DDR higher 32-bit address where image should be copied when memcpy

is enabled in BIF

0x38

Reserved

0x3C

Checksum

A sum of all the previous words.

        Image Header Attibutes内容如下: 

Bit Field

Name

Description

31:9

Reserved

0

8

Delay Hand off

0 – Handoff the image now (default)

1 – Handoff the image later

7

Delay load

0 – Load the image now (default)

1 – Load the image later

6

Copy to memory

0 – No copy to memory (Default)

1 – Image to be copied to memory

5:3

Image Owner

0 - PLM (default)

1 - Non-PLM

2-7 – Reserved

2:0

Reserved

0

 2.7 Versal ACAP Partition Header

        要找到Partition Header,需要先在Image Header Table中找到地址0x10 Partition Header Offset的4字节内容:

         4字节内容为0x0001_274c,即Partition Header是从地址0x0001_274c开始:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用nginx部署前后端分离项目,处理跨域问题(共享cookie)

1.唠嗑 踩坑了,花费一天时间,开始对nginx配置不懂,老是弄错了配置文件,之前装的nginx ,cofnig有两个,nginx.config和nginx.config.def ,开始配置我在nginx.config中配置的,后面一直在改def&…

谈谈VPN是什么、类型、使用场景、工作原理

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解VPN是什么、以及它的类型、使用场景、工作原理。 目录 一、VPN是什么? 二、VPN的类型 1、站点对站点VPN 2、…

「车型分析」控制系统典型应用车型 —— 停车机器人

如今,城市可用土地的日益稀缺(城市化)和汽车使用数量的增加(机动化),为了可持续性发展和其他生活质量问题相结合,由此孕育出来了一种自动停车系统。停车机器人凭借其灵活、高效、标准化的停车模式&#xff…

day27 贪心算法

1.什么是贪心? 比如10张钞票,有1,5,20,100等面额,取五张,如何取得到数额最多的钱?每次取面额最大的那张钞票;就是每个阶段的局部最优;全局最优就是最后拿到的…

【高并发网络通信架构】3.引入IO多路复用(select,poll,epoll)实现高并发tcp服务端

目录 一,往期文章 二,基本概念 IO多路复用 select 模型 poll 模型 epoll 模型 select,poll,epoll 三者对比 三,函数清单 1.select 方法 2.fd_set 结构体 3.poll 方法 4.struct pollfd 结构体 5.epoll_cre…

plt绘图绘制主次刻度线

这里主要是介绍的坐标轴上的主次刻度的划分,这里需要单独引入ticker中的两个模块进行设置 MultipleLocator, FormatStrFormatter set_major_locator() 设置主刻度set_minor_locator() 设置次刻度set_major_formatter() 设置主刻度格式plt.NullLocator() 删除刻度显…

WPS/Office Excel 方向键无法切换表格

问题:WPS/Office Excel 方向键无法切换表格。 分析:键盘开启了Scroll Lock,导致Excel开启了滚动锁定。滚动锁定如图: 解决:再次按下Scroll Lock键解锁即可。(Scroll Lock键在键盘右侧上方。)

Java设计模式之行为型-解释器模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 解释器模式是指给定一个语言(表达式),来表示它的文法,并定义一个解释器,使用该解释器来解释语言中的句子(表达式&a…

小奇猫物语之产品经理篇(2)

小奇猫物语之产品经理篇(2) 喵喵提示:小奇的产品经理篇(2)来咯,预告一下,前面几篇主要是讲产品经理的思维模式以及怎样去从一个学生思维转变成一个能带领一个项目的产品经理思维,所…

CSDN发表文章的常用语法说明

CSDN常用语法说明 一、标题二、文本样式三、列表四、图片五、链接六、目录一级目录二级目录三级目录 七、表格八、注释九、自定义列表十、LaTeX 数学公式十一、插入甘特图十二、插入UML图十三、插入Mermaid流程图十五、插入Flowchart流程图十六、 插入类图十七、快捷键十八、脚…

macOS Sonoma 14beta 3 (23A5286i)第二个更新「附黑/白苹果镜像下载」

系统镜像下载: 系统介绍 黑果魏叔 7 月12 日消息,苹果今天发布 macOS Sonoma 14.0 Beta 3(内部版本号:23A5286i)第二个更新。 目前尚不清楚苹果为什么要发布 macOS Sonoma Beta 3 的第二个版本,但它可能…

WooCommerce适合企业电子商务吗?

目录 成功开展电子商务业务变得比以往任何时候都容易。市场上有几个现成的平台,完全有可能将一个初步的想法快速转变为在线贸易业务,并源源不断地收到订单。 什么是 WooCommerce? 为什么您应该考虑使用 WooCommerce 很灵活 重量轻且功…

家政服务小程序软件解决方案

家政服务小程序软件是近年来随着人们对家政服务需求的增长而逐渐兴起的一种数字化服务解决方案。通过小程序软件,用户可以轻松预约家政服务,包括保姆、月嫂、钟点工等,而且价格透明、服务规范,大大提高了用户对家政服务的满意度。…

C++ cin

cin 内容来自《C Primer》 cin使用>>运算符从输入流中抽取字符 int carrots;cin >> carrots;如下的例子&#xff0c;用户输入的字符串有空格 #include <iostream>int main() {using namespace std;const int ArSize 20;char name[ArSize]; //用户名char …

nodejs 下载地址 阿里云开源镜像站

nodejs 下载地址 阿里云开源镜像站 https://mirrors.aliyun.com/nodejs-release/ 我们下期见&#xff0c;拜拜&#xff01;

Vue3的watchEffect的妙用,与watch的区别

前言 在Vue3中&#xff0c;引入了Composition API&#xff0c;其中的watchEffect()函数是一个非常强大和灵活的工具&#xff0c;用于处理响应式数据的变化&#xff0c;使得项目更加弹性和灵活。它与watch有所不同&#xff0c;本文将介绍watchEffect()的定义、特点、与watch的区…

24 MFC文档串行化和单文档应用程序

文章目录 文档串行化全部代码 单文档应用程序搭建原理搭建框架Win32 过度到MFC 三部曲设置ID资源全部代码 单文档应用程序设置标题绘图 简单的管理系统部分代码 文档串行化 ui 设计 保存 void CfileDemoDlg::OnBnClickedBtnSave() {UpdateData();//CFile file(L"Demo.dat…

linux驱动开发:驱动开发框架,linux内核字符设备驱动开发过程

一、驱动框架 1.Linux内核模块和字符驱动的关系 模块是Linux进行组建管理的一种方式, 结构体:对设备的管理内核需要抽象出来一个结构体来描述设备所有的共性信息写驱动需要申请一个结构体并赋值(初始化),然后注册给内核让内核统一管理 驱动:由内核统一管理,所以驱动…

Flask_自定义flask的cmd命令

创建自定义命令 from flask import Flaskapp Flask(__name__)app.cli.command() def hello():"""命令说明写这里"""print("hello python")if __name__ __main__:app.run() 执行flask --help 可以在命令查看定义的命令 注意事项&a…

CDN技术(Content Delivery Network,内容分发网络)分布式网络架构(CND与P2P(Peer-to-Peer)区别)

文章目录 CDN是什么&#xff1f;CDN的优势CDN的应用1. 静态内容加速2. 动态内容加速3. 视频流媒体4. 软件分发5. 游戏加速6. 移动应用加速 CDN收费吗&#xff1f;CND与P2P区别什么是静态内容和动态内容&#xff1f; CDN是什么&#xff1f; CDN&#xff08;Content Delivery Ne…