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 固件文件中的包头信息之后。每个映像都只是一个二进制块,其起始位置和大小由组件信息区域中匹配的组件结构定义。