PLDM 固件文件格式概述

PLDM 固件包是一个二进制文件,其中包含描述固件包内容的头。 这包括初始包头、一个或多个固件记录以及一个或多个描述要编程的实际闪存内容的组件。

此图提供了文件格式的概述

  overall file layout
+----------------------+
|                      |
|  Package Header      |
|                      |
+----------------------+
|                      |
|  Device Records      |
|                      |
+----------------------+
|                      |
|  Component Info      |
|                      |
+----------------------+
|                      |
|  Package Header CRC  |
|                      |
+----------------------+
|                      |
|  Component Image 1   |
|                      |
+----------------------+
|                      |
|  Component Image 2   |
|                      |
+----------------------+
|                      |
|         ...          |
|                      |
+----------------------+
|                      |
|  Component Image N   |
|                      |
+----------------------+

包头

包头以 PLDM 文件格式的 UUID 开头,并包含有关文件使用的格式版本的信息。 它还包括总头大小、发布日期、组件位图的大小和整体包版本。

下图提供了包头的概述

       header layout
+-------------------------+
| PLDM UUID               |
+-------------------------+
| Format Revision         |
+-------------------------+
| Header Size             |
+-------------------------+
| Release Date            |
+-------------------------+
| Component Bitmap Length |
+-------------------------+
| Package Version Info    |
+-------------------------+

设备记录

设备固件记录区域以一个计数开始,指示文件中记录的总数,然后是每条记录。 单个设备记录描述与此记录匹配的设备。 所有有效的 PLDM 固件文件必须至少包含一条记录,但如果它们支持多个设备,则可以选择包含多条记录。

每条记录将通过描述设备的 TLV(例如 PCI 设备和供应商信息)来标识它支持的设备。 它还将指示此设备使用哪组组件。 给定记录可能仅使用提供的组件的子集。 记录还可以选择包含设备特定的包数据,这些数据将在更新过程中由设备固件使用。

下图提供了设备记录区域的概述

   area layout
+---------------+
|               |
|  Record Count |
|               |
+---------------+
|               |
|  Record 1     |
|               |
+---------------+
|               |
|  Record 2     |
|               |
+---------------+
|               |
|      ...      |
|               |
+---------------+
|               |
|  Record N     |
|               |
+---------------+

     record layout
+-----------------------+
| Record Length         |
+-----------------------+
| Descriptor Count      |
+-----------------------+
| Option Flags          |
+-----------------------+
| Version Settings      |
+-----------------------+
| Package Data Length   |
+-----------------------+
| Applicable Components |
+-----------------------+
| Version String        |
+-----------------------+
| Descriptor TLVs       |
+-----------------------+
| Package Data          |
+-----------------------+

组件信息

组件信息区域以组件数量的计数开始。 此计数之后是对每个组件的描述。 组件信息指向文件中存储组件数据的位置,并包括用于标识组件版本的版本数据。

下图提供了组件区域的概述

   area layout
+-----------------+
|                 |
| Component Count |
|                 |
+-----------------+
|                 |
| Component 1     |
|                 |
+-----------------+
|                 |
| Component 2     |
|                 |
+-----------------+
|                 |
|     ...         |
|                 |
+-----------------+
|                 |
| Component N     |
|                 |
+-----------------+

     component layout
+------------------------+
| Classification         |
+------------------------+
| Component Identifier   |
+------------------------+
| Comparison Stamp       |
+------------------------+
| Component Options      |
+------------------------+
| Activation Method      |
+------------------------+
| Location Offset        |
+------------------------+
| Component Size         |
+------------------------+
| Component Version Info |
+------------------------+
| Package Data           |
+------------------------+

包头 CRC

组件信息之后是对所有头信息内容计算的 4 字节 CRC 短校验和。

组件映像

组件映像遵循 PLDM 固件文件中的包头信息。 每一个都只是一个二进制块,其起始位置和大小由组件信息区域中匹配的组件结构定义。