commit | d48ae5fbcaab4e67b43f03925612ea5252569f33 | [log] [tgz] |
---|---|---|
author | Chicago Duan <duanzhijia01@inspur.com> | Wed Jan 01 16:43:46 2020 +0800 |
committer | Lei YU <mine260309@gmail.com> | Tue Feb 11 07:10:10 2020 +0000 |
tree | 99496f98bde0cdcaecec517dfea30dd65bbcaa09 | |
parent | 617c0b718946b69594e1271dc5d4992d4c365616 [diff] |
generate-psu-tar: Add machine name and remove single "-" options Remove single "-" options because there are too many similar options. The openbmc image manager expects "MachineName" in MANIFEST that matches the BMC's OPENBMC_TARGET_MACHINE in /etc/os-release. * If there is no MachineName in MANIFEST, it logs a warning for now; * If they do not match, an error is reported and the version is deleted. Add --machineName argument for generate-psu-tar to make it support the "MachineName". Tested: Verify that when a correct machine name is given, the tarball is processed by image manager correctly; And if an invalid machine name is given, the tarball uploaded will get "Machine name doesn't match" error and is deleted. Signed-off-by: Chicago Duan <duanzhijia01@inspur.com> Change-Id: Ie39e01ae7e4a48fade3459a7eb82da214e0400e9
phosphor-psu-code-mgmt is a service to provide management for PSU code, including:
meson build/ && ninja -C build
meson -Doe-sdk=enabled -Dtests=enabled build/ ninja -C build/ test # Meson skips running the case due to it thinks it's cross compiling # Manually run the tests for t in `find build/test/ -maxdepth 1 -name "test_*"`; do ./$t || break ; done
This repo contains generic code to handle the PSU versions and updates. It depends on vendor-specific tools to provide the below functions on the real PSU hardware:
It provides configure options for vendor-specific tools for the above functions:
PSU_VERSION_UTIL
: It shall be defined as a command-line tool that accepts the PSU inventory path as input, and outputs the PSU version string to stdout.PSU_VERSION_COMPARE_UTIL
: It shall be defined as a command-line tool that accepts one or more PSU version strings, and outputs the latest version string to stdout.PSU_UPDATE_SERVICE
: It shall be defined as a systemd service that accepts two arguments:For example:
meson -Dtests=disabled \ '-DPSU_VERSION_UTIL=/usr/bin/psutils --raw --get-version' \ '-DPSU_VERSION_COMPARE_UTIL=/usr/bin/psutils --raw --compare' \ '-DPSU_UPDATE_SERVICE=psu-update@.service' \ build
The above configures the vendor-specific tools to use psutils
from phosphor-power to get and compare the PSU versions, and use psu-update@.service
to perform the PSU firmware update, where internally it invokes psutils
as well.
When the service starts, it queries the inventory to get all the PSU inventory paths, invokes the vendor-specific tool to get the versions, and creates version objects under /xyz/openbmc_project/software
that are associated with the PSU inventory path. If multiple PSUs are using the same version, multiple PSU inventory paths are associated.
E.g.
"/xyz/openbmc_project/software/02572429": { "Activation": "xyz.openbmc_project.Software.Activation.Activations.Active", "Associations": [ [ "inventory", "activation", "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1" ] ], "ExtendedVersion": "", "Path": "", "Purpose": "xyz.openbmc_project.Software.Version.VersionPurpose.PSU", "RequestedActivation": "xyz.openbmc_project.Software.Activation.RequestedActivations.None", "Version": "01120114" }, "/xyz/openbmc_project/software/7094f612": { "Activation": "xyz.openbmc_project.Software.Activation.Activations.Active", "Associations": [ [ "inventory", "activation", "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0" ] ], "ExtendedVersion": "", "Path": "", "Purpose": "xyz.openbmc_project.Software.Version.VersionPurpose.PSU", "RequestedActivation": "xyz.openbmc_project.Software.Activation.RequestedActivations.None", "Version": "00000110" },
"/xyz/openbmc_project/software/9463c2ad": { "Activation": "xyz.openbmc_project.Software.Activation.Activations.Active", "Associations": [ [ "inventory", "activation", "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0" ], [ "inventory", "activation", "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1" ] ], "ExtendedVersion": "", "Path": "", "Purpose": "xyz.openbmc_project.Software.Version.VersionPurpose.PSU", "RequestedActivation": "xyz.openbmc_project.Software.Activation.RequestedActivations.None", "Version": "01100110" },
./generate-psu-tar --image <psu-image> --version <version> --model <model> --manufacture \ <manufacture> --machineName <machineName> --outfile <psu.tar> --sign
IMG_DIR_PERSIST
. When a PSU is replaced, the PSU's firmware version will be checked and updated if it's older than the one stored in BMC.IMG_DIR_BUILTIN
. When the service starts, it will compare the versions of the built-in image, the stored image (after PSU update), and the existing PSUs, if there is any PSU that has an older firmware, it will be updated to the newest one.