PLDM 韌體快閃記憶體更新庫

pldmfw 實現了使用 PLDM 韌體更新標準 <https://www.dmtf.org/documents/pmci/pldm-firmware-update-specification-100> 來更新裝置快閃記憶體的功能。

pldmfw 庫概述

pldmfw 庫旨在供裝置驅動程式使用,以實現基於遵循 PLDM 韌體檔案格式的韌體檔案的裝置快閃記憶體更新。

它透過一個操作表實現,該操作表允許裝置驅動程式提供底層的裝置特定功能。

pldmfw 實現了將 PLDM 韌體檔案的打包二進位制格式解析成資料結構的邏輯,然後使用提供的函式操作來確定韌體檔案是否與裝置匹配。如果匹配,它會使用裝置驅動程式提供的裝置特定實現,將記錄和元件資料傳送給韌體。一旦裝置韌體指示可以執行更新,韌體資料就會發送到裝置進行程式設計。

解析 PLDM 檔案

PLDM 檔案格式使用打包的二進位制資料,其中大多數多位元組欄位以小端格式儲存。有些資料是可變長度的,包括版本字串以及記錄和元件的數量。因此,直接索引記錄、記錄描述符或元件並不簡單。

為避免對打包二進位制資料的重複訪問,pldmfw 庫會解析並提取這些資料到更簡單的結構中,以便於訪問。

為了安全地處理韌體檔案,需要注意避免對多位元組欄位進行非對齊訪問,並正確地將小端格式轉換為 CPU 主機格式。此外,記錄、描述符和元件都儲存在連結串列中。

執行快閃記憶體更新

要執行快閃記憶體更新,pldmfw 模組執行以下步驟:

  1. 解析韌體檔案以獲取記錄和元件資訊

  2. 掃描記錄並確定裝置是否與檔案中的任何記錄匹配。將使用第一個匹配的記錄。

  3. 如果匹配的記錄提供了包資料,則將此包資料傳送到裝置。

  4. 對於記錄指示的每個元件,將元件資料傳送到裝置。對於每個元件,韌體可能會響應,指示更新是否合適。如果任何元件不合適,則更新將被取消。

  5. 對於每個元件,將二進位制資料傳送到裝置韌體進行更新。

  6. 所有元件程式設計完成後,執行任何最終的裝置特定操作以完成更新。