blob: 443c27131c1af68ff3cef2d89db00dacb296695f [file] [log] [blame]
# 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