diff options
Diffstat (limited to 'meta-phosphor')
-rw-r--r-- | meta-phosphor/classes/image-overlay.bbclass | 144 | ||||
-rw-r--r-- | meta-phosphor/classes/image_types_phosphor.bbclass | 205 | ||||
-rw-r--r-- | meta-phosphor/conf/machine/include/obmc-bsp-common.inc | 2 |
3 files changed, 203 insertions, 148 deletions
diff --git a/meta-phosphor/classes/image-overlay.bbclass b/meta-phosphor/classes/image-overlay.bbclass deleted file mode 100644 index 443c27131..000000000 --- a/meta-phosphor/classes/image-overlay.bbclass +++ /dev/null @@ -1,144 +0,0 @@ -# Constructs a bootable, fixed-offset mtd image with u-boot -# bootloader, kernel fitimage, read only root filesystem, -# and writeable overlay filesystem. - -IMAGE_BASETYPE ?= "squashfs-xz" -OVERLAY_BASETYPE ?= "jffs2" - -IMAGE_TYPES += "overlay" - -IMAGE_TYPEDEP_overlay = "${IMAGE_BASETYPE}" -IMAGE_TYPES_MASKED += "overlay" - -FLASH_KERNEL_IMAGE ?= "fitImage-${INITRAMFS_IMAGE}-${MACHINE}.bin" - -FLASH_UBOOT_OFFSET ?= "0" -FLASH_KERNEL_OFFSET ?= "512" -FLASH_ROFS_OFFSET ?= "4864" -FLASH_RWFS_OFFSET ?= "28672" -RWFS_SIZE ?= "4096" - -# 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 .= ":rwfs-${OVERLAY_BASETYPE}" - -OVERLAY_MKFS_OPTS_rwfs-ext4 = "-b 4096 -F -O^huge_file" - -# $(( ${FLASH_SIZE} - ${FLASH_RWFS_OFFSET} )) - -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 -} - -do_generate_flash() { - ddir="${IMGDEPLOYDIR}" - kernel="${FLASH_KERNEL_IMAGE}" - uboot="u-boot.${UBOOT_SUFFIX}" - rootfs="${IMAGE_LINK_NAME}.${IMAGE_BASETYPE}" - rwfs="rwfs.${OVERLAY_BASETYPE}" - - flash="${IMAGE_NAME}.overlay" - - mk_nor_image ${S}/$rwfs ${RWFS_SIZE} - if [ "${OVERLAY_BASETYPE}" != jffs2 ]; then - mkfs.${OVERLAY_BASETYPE} ${OVERLAY_MKFS_OPTS} ${S}/$rwfs || \ - bbfatal "mkfs rwfs" - fi - - # Assemble the flash image - dst="$ddir/$flash" - mk_nor_image $dst ${FLASH_SIZE} - dd if=${DEPLOY_DIR_IMAGE}/$uboot of=$dst bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} - dd if=${DEPLOY_DIR_IMAGE}/$kernel of=$dst bs=1k conv=notrunc seek=${FLASH_KERNEL_OFFSET} - dd if=$ddir/$rootfs of=$dst bs=1k conv=notrunc seek=${FLASH_ROFS_OFFSET} - dd if=${S}/$rwfs of=$dst bs=1k conv=notrunc seek=${FLASH_RWFS_OFFSET} - - cd ${IMGDEPLOYDIR} - ln -sf $flash ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.overlay - - # Maintain a number of non-standard name legacy links. - ln -sf $flash ${IMGDEPLOYDIR}/flash-${MACHINE} - ln -sf $flash ${IMGDEPLOYDIR}/image-bmc - ln -sf $uboot ${IMGDEPLOYDIR}/image-u-boot - ln -sf $kernel ${IMGDEPLOYDIR}/image-kernel - ln -sf $rootfs ${IMGDEPLOYDIR}/image-rofs - cp ${S}/$rwfs ${IMGDEPLOYDIR}/$rwfs - ln -sf $rwfs ${IMGDEPLOYDIR}/image-rwfs -} - -make_overlay_tars() { - ddir="${IMGDEPLOYDIR}" - kernel="${FLASH_KERNEL_IMAGE}" - uboot="u-boot.${UBOOT_SUFFIX}" - rootfs="${IMAGE_LINK_NAME}.${IMAGE_BASETYPE}" - rwfs="rwfs.${OVERLAY_BASETYPE}" - - flash="${IMAGE_NAME}.overlay" - alltar="${IMAGE_NAME}.all.tar" - tar="${IMAGE_NAME}.tar" - - # Create some links to help make the tar archives - ln -sf $ddir/${IMAGE_LINK_NAME}.overlay ${S}/image-bmc - ln -sf ${DEPLOY_DIR_IMAGE}/$uboot ${S}/image-u-boot - ln -sf ${DEPLOY_DIR_IMAGE}/$kernel ${S}/image-kernel - ln -sf $ddir/$rootfs ${S}/image-rofs - ln -sf $rwfs ${S}/image-rwfs - - # Create the tar archives - tar -h -cvf $ddir/$alltar -C ${S} image-bmc MANIFEST - tar -h -cvf $ddir/$tar -C ${S} image-u-boot image-kernel image-rofs image-rwfs MANIFEST - - cd ${IMGDEPLOYDIR} - ln -sf $alltar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.all.tar - ln -sf $tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.tar - - # Maintain a number of non-standard name legacy links. - ln -sf $tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar - ln -sf $alltar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar -} - -make_overlay_tars[vardepsexclude] = "DATETIME" - -def generate_manifest(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 = '' - 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(os.path.join(d.getVar('S', True), 'MANIFEST'), 'w') as fd: - fd.write('purpose=xyz.openbmc_project.Software.Version.VersionPurpose.BMC\n') - fd.write('version={}\n'.format(version.strip('"'))) - - -python do_generate_tars() { - generate_manifest(d) - bb.build.exec_func('make_overlay_tars', d) -} - - -do_generate_flash[depends] += " \ - ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \ - virtual/kernel:do_deploy \ - u-boot:do_populate_sysroot \ - " - -do_generate_tars[depends] += " \ - ${PN}:do_generate_flash \ - os-release:do_populate_sysroot \ - " - -addtask generate_flash before do_image_complete -addtask generate_tars before do_image_complete 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) +} diff --git a/meta-phosphor/conf/machine/include/obmc-bsp-common.inc b/meta-phosphor/conf/machine/include/obmc-bsp-common.inc index 03e73b340..63c5e1ab9 100644 --- a/meta-phosphor/conf/machine/include/obmc-bsp-common.inc +++ b/meta-phosphor/conf/machine/include/obmc-bsp-common.inc @@ -10,7 +10,7 @@ UBOOT_SUFFIX ?= "bin" MACHINEOVERRIDES =. "openbmc:" -IMAGE_FSTYPES += "cpio.${INITRAMFS_CTYPE}.u-boot overlay" +IMAGE_FSTYPES += "cpio.${INITRAMFS_CTYPE}.u-boot mtd-static mtd-static-tar mtd-static-alltar" OBMC_IMAGE_EXTRA_INSTALL_append = " u-boot-fw-utils" INITRAMFS_CTYPE ?= "lzma" |