PLDM 固件闪存更新库¶
pldmfw
实现了使用 PLDM 固件更新标准 <https://www.dmtf.org/documents/pmci/pldm-firmware-update-specification-100> 来更新设备闪存的功能。
pldmfw
库概述¶
pldmfw
库旨在供设备驱动程序使用,以实现基于遵循 PLDM 固件文件格式的固件文件的设备闪存更新。
它通过一个操作表实现,该操作表允许设备驱动程序提供底层的设备特定功能。
pldmfw
实现了将 PLDM 固件文件的打包二进制格式解析成数据结构的逻辑,然后使用提供的函数操作来确定固件文件是否与设备匹配。如果匹配,它会使用设备驱动程序提供的设备特定实现,将记录和组件数据发送给固件。一旦设备固件指示可以执行更新,固件数据就会发送到设备进行编程。
解析 PLDM 文件¶
PLDM 文件格式使用打包的二进制数据,其中大多数多字节字段以小端格式存储。有些数据是可变长度的,包括版本字符串以及记录和组件的数量。因此,直接索引记录、记录描述符或组件并不简单。
为避免对打包二进制数据的重复访问,pldmfw
库会解析并提取这些数据到更简单的结构中,以便于访问。
为了安全地处理固件文件,需要注意避免对多字节字段进行非对齐访问,并正确地将小端格式转换为 CPU 主机格式。此外,记录、描述符和组件都存储在链表中。
执行闪存更新¶
要执行闪存更新,pldmfw
模块执行以下步骤:
解析固件文件以获取记录和组件信息
扫描记录并确定设备是否与文件中的任何记录匹配。将使用第一个匹配的记录。
如果匹配的记录提供了包数据,则将此包数据发送到设备。
对于记录指示的每个组件,将组件数据发送到设备。对于每个组件,固件可能会响应,指示更新是否合适。如果任何组件不合适,则更新将被取消。
对于每个组件,将二进制数据发送到设备固件进行更新。
所有组件编程完成后,执行任何最终的设备特定操作以完成更新。