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 韌體檔案中的包頭資訊之後。每個映像都只是一個二進位制塊,其起始位置和大小由元件資訊區域中匹配的元件結構定義。