summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaqib Khan <khansa@us.ibm.com>2017-09-22 10:21:30 -0500
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-11-16 03:32:03 +0000
commit417234737e4238a6f2315188c10d1e16f65e9664 (patch)
treeade1ca36741a5b8b700f6d19eef4c673e3722a57
parent10721e62693599aa11d82588dfe5d5c89b2e108e (diff)
downloadtalos-openbmc-417234737e4238a6f2315188c10d1e16f65e9664.tar.gz
talos-openbmc-417234737e4238a6f2315188c10d1e16f65e9664.zip
Calculate the version ID of BMC UBI volumes during build time.
- When the new ubi layout is flashed onto the BMC, the volumes were named kernel-0 and rofs-0 by default. This tends to be misleading as we can't differentiate between two different BMC versions. - Now the ubi volumes will be named kernel-<versionID> and rofs-<versionID> calculated by getting the hash(SHA-512) of the version and taking the first 8 characters. - The Uboot env needs to be updated to point to the correct kernelname which has now changed from kernel-0 to kernel-<versionID> calculated by getting the HASH(SHA-512) of the version and taking the first 8 characters. Resolves openbmc/openbmc#2323 Change-Id: I258d165b399d1ff59ea86f410006f6d03fe13a2e Signed-off-by: Saqib Khan <khansa@us.ibm.com>
-rw-r--r--meta-phosphor/classes/image_types_phosphor.bbclass40
-rw-r--r--meta-phosphor/classes/image_version.bbclass26
-rw-r--r--meta-phosphor/common/recipes-bsp/u-boot/u-boot.inc16
3 files changed, 62 insertions, 20 deletions
diff --git a/meta-phosphor/classes/image_types_phosphor.bbclass b/meta-phosphor/classes/image_types_phosphor.bbclass
index 8d19c80f5..5599332f6 100644
--- a/meta-phosphor/classes/image_types_phosphor.bbclass
+++ b/meta-phosphor/classes/image_types_phosphor.bbclass
@@ -10,6 +10,7 @@ def build_uboot(d):
# Inherit u-boot classes if legacy uboot images are in use.
IMAGE_TYPE_uboot = '${@build_uboot(d)}'
inherit ${IMAGE_TYPE_uboot}
+inherit image_version
# Phosphor image types
#
@@ -139,16 +140,27 @@ add_volume() {
fi
}
-do_generate_ubi() {
- cfg=ubinize-${IMAGE_NAME}.cfg
+python do_generate_ubi() {
+ version_id = do_get_versionID(d)
+ d.setVar('VERSION_ID', version_id)
+ bb.build.exec_func("do_make_ubi", d)
+}
+do_generate_ubi[dirs] = "${S}/ubi"
+do_generate_ubi[depends] += " \
+ ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
+ virtual/kernel:do_deploy \
+ u-boot:do_populate_sysroot \
+ mtd-utils-native:do_populate_sysroot \
+ "
+do_make_ubi() {
+ cfg=ubinize-${IMAGE_NAME}.cfg
rm -f $cfg ubi-img
-
# Construct the ubinize config file
- add_volume $cfg 0 static kernel-0 \
+ add_volume $cfg 0 static kernel-${VERSION_ID} \
${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
- add_volume $cfg 1 static rofs-0 \
+ add_volume $cfg 1 static rofs-${VERSION_ID} \
${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
add_volume $cfg 2 dynamic rwfs rwfs.${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_RWFS_TXT_SIZE}
@@ -168,8 +180,8 @@ do_generate_ubi() {
cd ${IMGDEPLOYDIR}
ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
}
-do_generate_ubi[dirs] = "${S}/ubi"
-do_generate_ubi[depends] += " \
+do_make_ubi[dirs] = "${S}/ubi"
+do_make_ubi[depends] += " \
${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
virtual/kernel:do_deploy \
u-boot:do_populate_sysroot \
@@ -281,19 +293,7 @@ do_generate_ubi_tar[depends] += " \
"
python do_generate_phosphor_manifest() {
- import configparser
- import io
- path = d.getVar('STAGING_DIR_HOST', True) + d.getVar('sysconfdir', True)
- path = os.path.join(path, 'os-release')
- parser = configparser.SafeConfigParser(strict=False)
- parser.optionxform = str
- version = ''
- with open(path, 'r') as fd:
- buf = '[root]\n' + fd.read()
- fd = io.StringIO(buf)
- parser.readfp(fd)
- version = parser['root']['VERSION_ID']
-
+ version = do_get_version(d)
with open('MANIFEST', 'w') as fd:
fd.write('purpose=xyz.openbmc_project.Software.Version.VersionPurpose.BMC\n')
fd.write('version={}\n'.format(version.strip('"')))
diff --git a/meta-phosphor/classes/image_version.bbclass b/meta-phosphor/classes/image_version.bbclass
new file mode 100644
index 000000000..f9abb5fc9
--- /dev/null
+++ b/meta-phosphor/classes/image_version.bbclass
@@ -0,0 +1,26 @@
+# Base image version class extension
+
+def do_get_version(d):
+ import configparser
+ import io
+ path = d.getVar('STAGING_DIR_HOST', True) + d.getVar('sysconfdir', True)
+ path = os.path.join(path, 'os-release')
+ parser = configparser.SafeConfigParser(strict=False)
+ parser.optionxform = str
+ version = ''
+ try:
+ with open(path, 'r') as fd:
+ buf = '[root]\n' + fd.read()
+ fd = io.StringIO(buf)
+ parser.readfp(fd)
+ version = parser['root']['VERSION_ID']
+ except:
+ pass
+ return version
+
+def do_get_versionID(d):
+ import hashlib
+ version = do_get_version(d)
+ version = version.strip('"')
+ version_id = (hashlib.sha512(version.encode('utf-8')).hexdigest())[:8]
+ return version_id
diff --git a/meta-phosphor/common/recipes-bsp/u-boot/u-boot.inc b/meta-phosphor/common/recipes-bsp/u-boot/u-boot.inc
index 6eac53309..5cc320fbc 100644
--- a/meta-phosphor/common/recipes-bsp/u-boot/u-boot.inc
+++ b/meta-phosphor/common/recipes-bsp/u-boot/u-boot.inc
@@ -4,10 +4,26 @@ SRCREV = "16f997c564f873b4fdf12fc90ee8a9f6f6080961"
UBRANCH = "v2016.07-aspeed-openbmc"
SRC_URI = "git://git@github.com/openbmc/u-boot.git;branch=${UBRANCH};protocol=https"
+inherit image_version
+
SRC_URI += "file://0001-configs-ast-Add-redundnant-env.patch"
SRC_URI += "${@bb.utils.contains('MACHINE_FEATURES', 'obmc-ubi-fs', \
'file://0001-config-ast-common-hack-bootopts.patch \
file://0004-config-ast-common-ubi-bootops.patch', '', d)}"
+python do_configure () {
+ if ((d.getVar("MACHINE_FEATURES", True)) == "obmc-ubi-fs"):
+ version_id=do_get_versionID(d)
+ d.setVar('VERSION_ID', version_id)
+ bb.build.exec_func("patch_uboot", d)
+}
+
+patch_uboot () {
+ sed -i "s/kernel-0/kernel-${VERSION_ID}/g" \
+ ${S}/patches/0004-config-ast-common-ubi-bootops.patch &> /dev/null
+ sed -i "s/kernel-0/kernel-${VERSION_ID}/g" \
+ ${S}/include/configs/ast-common.h &> /dev/null
+}
+
PV = "v2016.07+git${SRCPV}"
OpenPOWER on IntegriCloud