summaryrefslogtreecommitdiffstats
path: root/meta-phosphor/classes/image_types_phosphor.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta-phosphor/classes/image_types_phosphor.bbclass')
-rw-r--r--meta-phosphor/classes/image_types_phosphor.bbclass205
1 files changed, 202 insertions, 3 deletions
diff --git a/meta-phosphor/classes/image_types_phosphor.bbclass b/meta-phosphor/classes/image_types_phosphor.bbclass
index eef1b1c67..51259df12 100644
--- a/meta-phosphor/classes/image_types_phosphor.bbclass
+++ b/meta-phosphor/classes/image_types_phosphor.bbclass
@@ -11,6 +11,205 @@ def build_uboot(d):
IMAGE_TYPE_uboot = '${@build_uboot(d)}'
inherit ${IMAGE_TYPE_uboot}
-# Inherit the overlay class if overlay is in use.
-IMAGE_TYPE_overlay = '${@bb.utils.contains("IMAGE_FSTYPES", "overlay", "image-overlay", "", d)}'
-inherit ${IMAGE_TYPE_overlay}
+# Phosphor image types
+#
+# Phosphor OpenBMC supports a fixed partition mtd layout.
+
+# Image composition
+FLASH_KERNEL_IMAGE ?= "fitImage-${INITRAMFS_IMAGE}-${MACHINE}.bin"
+IMAGE_BASETYPE ?= "squashfs-xz"
+OVERLAY_BASETYPE ?= "jffs2"
+
+IMAGE_TYPES += "mtd-static mtd-static-alltar mtd-static-tar"
+
+IMAGE_TYPEDEP_mtd-static = "${IMAGE_BASETYPE}"
+IMAGE_TYPEDEP_mtd-static-tar = "${IMAGE_BASETYPE}"
+IMAGE_TYPEDEP_mtd-static-alltar = "mtd-static"
+IMAGE_TYPES_MASKED += "mtd-static mtd-static-alltar mtd-static-tar"
+
+# Flash characteristics
+FLASH_SIZE ?= "32768"
+
+# Fixed partition offsets
+FLASH_UBOOT_OFFSET ?= "0"
+FLASH_KERNEL_OFFSET ?= "512"
+FLASH_ROFS_OFFSET ?= "4864"
+FLASH_RWFS_OFFSET ?= "28672"
+
+# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
+# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
+# reserved for the primary image (and setting them currently breaks the build).
+# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
+DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
+
+JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=rwfs.jffs2"
+
+FLASH_STATIC_RWFS_CMD_static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
+
+mk_nor_image() {
+ image_dst="$1"
+ image_size_kb=$2
+ dd if=/dev/zero bs=1k count=$image_size_kb \
+ | tr '\000' '\377' > $image_dst
+}
+
+make_rwfs() {
+ type=$1
+ cmd=$2
+ shift
+ shift
+ opts="$@"
+
+ rm -f rwfs.$type
+ rm -rf $type
+ mkdir $type
+
+ $cmd $opts
+}
+
+do_generate_rwfs_static() {
+ make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
+}
+do_generate_rwfs_static[dirs] = " ${S}/static"
+do_generate_rwfs_static[depends] += " \
+ mtd-utils-native:do_populate_sysroot \
+ "
+
+do_generate_static() {
+ # Assemble the flash image
+ mk_nor_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
+ dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
+ if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
+ of=${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd
+
+ dd bs=1k conv=notrunc seek=${FLASH_KERNEL_OFFSET} \
+ if=${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} \
+ of=${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd
+
+ dd bs=1k conv=notrunc seek=${FLASH_ROFS_OFFSET} \
+ if=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} \
+ of=${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd
+
+ dd bs=1k conv=notrunc seek=${FLASH_RWFS_OFFSET} \
+ if=rwfs.${OVERLAY_BASETYPE} \
+ of=${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd
+ # File needed for generating non-standard legacy links below
+ cp rwfs.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/rwfs.${OVERLAY_BASETYPE}
+
+ cd ${IMGDEPLOYDIR}
+ ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
+
+ # Maintain non-standard legacy links
+ ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
+ ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
+ ln -sf u-boot.${UBOOT_SUFFIX} ${IMGDEPLOYDIR}/image-u-boot
+ ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
+ ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
+ ln -sf rwfs.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
+}
+do_generate_static[dirs] = "${S}/static"
+do_generate_static[depends] += " \
+ ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
+ virtual/kernel:do_deploy \
+ u-boot:do_populate_sysroot \
+ "
+
+do_generate_static_alltar() {
+ ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
+ tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar image-bmc
+
+ cd ${IMGDEPLOYDIR}
+
+ ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
+ ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
+
+ # Maintain non-standard legacy link.
+ ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
+ ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
+}
+do_generate_static_alltar[vardepsexclude] = "DATETIME"
+do_generate_static_alltar[dirs] = "${S}/static"
+
+make_tar_of_images() {
+ rwfs=$1
+ rofs=$2
+ type=$3
+ shift
+ shift
+ shift
+ extra_files="$@"
+
+ # Create some links to help make the tar archive
+ ln -sf ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} image-u-boot
+ ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
+ ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
+ ln -sf rwfs.$rwfs image-rwfs
+
+ # Create the tar archive
+ tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.mtd.tar \
+ image-u-boot image-kernel image-rofs image-rwfs $extra_files
+
+ cd ${IMGDEPLOYDIR}
+ ln -sf ${IMAGE_NAME}.$type.mtd.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.mtd.tar
+}
+
+do_generate_static_tar() {
+ make_tar_of_images ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE} static
+
+ # Maintain non-standard legacy link.
+ cd ${IMGDEPLOYDIR}
+ ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
+}
+do_generate_static_tar[dirs] = " ${S}/static"
+do_generate_static_tar[depends] += " \
+ ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
+ virtual/kernel:do_deploy \
+ u-boot:do_populate_sysroot \
+ "
+do_generate_static_tar[vardepsexclude] = "DATETIME"
+
+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']
+
+ with open('MANIFEST', 'w') as fd:
+ fd.write('purpose=xyz.openbmc_project.Software.Version.VersionPurpose.BMC\n')
+ fd.write('version={}\n'.format(version.strip('"')))
+}
+do_generate_phosphor_manifest[dirs] = "${S}"
+do_generate_phosphor_manifest[depends] += " \
+ os-release:do_populate_sysroot \
+ "
+
+addtask generate_phosphor_manifest after do_rootfs
+addtask generate_rwfs_static after do_rootfs
+
+python() {
+ types = d.getVar('IMAGE_FSTYPES', True).split()
+
+ if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
+ bb.build.addtask(
+ 'do_generate_static',
+ 'do_image_complete',
+ 'do_generate_rwfs_static', d)
+ if 'mtd-static-alltar' in types:
+ bb.build.addtask(
+ 'do_generate_static_alltar',
+ 'do_image_complete',
+ 'do_generate_static', d)
+ if 'mtd-static-tar' in types:
+ bb.build.addtask(
+ 'do_generate_static_tar',
+ 'do_image_complete',
+ 'do_generate_rwfs_static', d)
+}
OpenPOWER on IntegriCloud