| # Overview |
| |
| pldm_fwup_pkg_creator.py is a python script that can package one or more |
| firmware image blobs into a PLDM firmware update package, as per the DSP0267 |
| specification v1.1.0 - Section 7. |
| |
| ## Requirements |
| |
| - Python 3.6+ |
| - Python bitarray module |
| - For example on Ubuntu: sudo pip3 install bitarray |
| |
| ## Usage |
| |
| pldm_fwup_pkg_creator.py [-h] |
| pldmfwuppkgname metadatafile images |
| [images ...] |
| |
| positional arguments: |
| pldmfwuppkgname Name of the PLDM FW update package |
| metadatafile Path of metadata JSON file |
| images One or more firmware image paths, in the same order as |
| ComponentImageInformationArea entries |
| |
| - Provide name for the PLDM FW update package, output will be written to a file |
| with this name |
| - Providing the metadata JSON file is a must |
| - The file path of at least one image file must be provided |
| - In case there are more than one images, they should be specified in the _same |
| order_ as the entries in the "ComponentImageInformationArea" list in the |
| metadata json |
| |
| ## Metadata JSON file |
| |
| Some fields corresponding to the PLDM firmware update package must be specified |
| in an input metadata file (see the section 'Mapping fields to DSP0267') that's |
| in JSON format. Typically it is not necessary to write this file each time the |
| PLDM firmware update package has to be generated - one or more platform specific |
| metadata JSON files can be reused. The key names used in the metadata JSON |
| _match with the proprerty names_ used in DSP0267. There is an example metadata |
| json file included - metadata-example.json, which has example entries for |
| preparing a PLDM firmware update package that targets three devices, and there |
| are a total of three component images. |
| |
| ## Mapping fields to DSP0267 |
| |
| This section describes the following: |
| |
| - which fields of the PLDM firmware update package are supported by the script |
| - whether those fields need to be specified in the JSON, or are generated by the |
| script |
| |
| ## Package Header Information |
| |
| Metadata JSON must have a key called "PackageHeaderInformation", which is of |
| type Object. See below for details on properties: |
| |
| - PackageHeaderIdentifier: Supported, must be specified in metadata file |
| - PackageHeaderFormatRevision: Supported, must be specified in metadata file |
| - PackageHeaderSize: Supported, generated by the script |
| - PackageReleaseDateTime: Supported, this is an optional field in the metadata |
| file and the format is YYYY-MM-DD HH:mm:ss (or with the space replaced with a |
| 'T' for full ISO-8601 compliance). If not specified in the metadata file, |
| current time is taken. |
| - ComponentBitmapBitLength: Supported, generated by the script |
| - Only 32 components supported at the moment |
| - PackageVersionStringType: Supported - only ASCII at the moment. Generated by |
| the script |
| - PackageVersionStringLength: Supported, generated by the script |
| - PackageVersionString: Supported, must be specified in metadata file |
| |
| ## Firmware Device Identification Area |
| |
| Metadata JSON must have a key called "FirmwareDeviceIdentificationArea", which |
| is of type List. Each List entry corresponds to an firmware device ID record. |
| See below for details on properties: |
| |
| - DeviceIDRecordCount: Supported, generated by the script |
| - FirmwareDeviceIDRecords: which is a list of Individual Firmware Device ID |
| Records. Each such record can have the following properties: |
| - RecordLength: Supported, generated by the script |
| - DescriptorCount: Supported, generated by the script |
| - DeviceUpdateOptionFlags: Supported, must be specified in metadata file |
| - add each bit that is to be set to 1 to the list "DeviceUpdateOptionFlags" |
| - ComponentImageSetVersionStringType: Supported - only ASCII at the moment. |
| Generated by the script |
| - ComponentImageSetVersionStringLength: Supported, generated by the script |
| - FirmwareDevicePackageDataLength: Not supported. Set to 0 by the script |
| - ApplicableComponents: Supported, must be specified in metadata file |
| - specify indexes of "ComponentImageInformationArea" values that apply in |
| the "ApplicableComponents" list |
| - ComponentImageSetVersionString: Supported, must be specified in metadata |
| file |
| - RecordDescriptors: Metadata JSON must have a key called "Descriptors", which |
| is of type List. Each List entry corresponds to a descriptor. The first |
| entry is considered as the initial descriptor and the type shall be one of |
| the following 0x0000(PCI Vendor ID), 0x0001(IANA Enterprise ID), |
| 0x0002(UUID), 0x0003(PnP Vendor ID), 0x0004(ACPI Vendor ID). The additional |
| descriptors support initial descriptor types and additionally 0x0100(PCI |
| Device ID), 0x0101(PCI Subsystem Vendor ID), 0x0102(PCI Subsystem ID), |
| 0x0103(PCI Revision ID), 0x0104(PnP Product Identifier), 0x0105(ACPI Product |
| Identifier), 0xFFFF(Vendor defined). For descriptor types other than vendor |
| defined the properties expected are DescriptorType and DescriptorData. If |
| the descriptor type is vendor defined, the properties expected are |
| DescriptorType, VendorDefinedDescriptorTitleString and |
| VendorDefinedDescriptorData. See below for details on properties: |
| - DescriptorType: Supported, must be specified in metadata file |
| - DescriptorLength: Supported, generated by the script |
| - DescriptorData: Supported, must be specified in metadata file as a hex |
| string |
| - VendorDefinedDescriptorTitleStringType: Supported - only ASCII at the |
| moment. |
| - VendorDefinedDescriptorTitleStringLength: Supported, generated by the |
| script |
| - VendorDefinedDescriptorTitleString: Supported, must be specified in |
| metadata file |
| - VendorDefinedDescriptorData: Supported, must be specified in metadata file |
| as a hex string |
| - FirmwareDevicePackageData: Not supported at the moment |
| |
| ## Downstream Device Identification Area |
| |
| Not supported at the moment |
| |
| ## Component Image Information Area |
| |
| Metadata JSON must have a key called "ComponentImageInformationArea", which is |
| of type List. Each List entry corresponds to an Individual Component Image |
| Information. See below for details on properties: |
| |
| - ComponentImageCount: Supported, generated by the script |
| - ComponentImageInformation: which is a list of Individual Component Image |
| Information records. Each such record can have the following properties: |
| - ComponentClassification: Supported, must be specified in metadata file |
| - ComponentIdentifier: Supported, must be specified in metadata file |
| - ComponentComparisonStamp: Supported. Must be specified as hexadecimal string |
| value in metadata file if ComponentOptions bit 1 is selected. If the |
| ComponentOptions bit 1 is not set, the ComponentComparisonStamp will be set |
| to the default value of 0xFFFFFFFF. |
| - ComponentOptions: Supported, must be specified in metadata file |
| - add each bit that is to be set to 1 to the list "ComponentOptions" |
| - supported options are Force Update and Use Component Comparison Stamp. |
| - RequestedComponentActivationMethod: Supported, must be specified in metadata |
| file |
| - add each bit that is to be set to 1 to the list |
| "RequestedComponentActivationMethod" |
| - ComponentLocationOffset: Supported, generated by the script |
| - ComponentSize: Supported, generated by the script |
| - ComponentVersionStringType: Supported - only ASCII at the moment. Generated |
| by the script |
| - ComponentVersionStringLength: Supported, generated by the script |
| - ComponentVersionString: Supported, must be specified in metadata file |
| |
| ## Package Header Checksum |
| |
| Supported, generated by the script |