image_types.bbclass: add support for multiple ubi sizes

Add new FSTYPE called 'multiubi'. This new type has the ability to
create multple ubi's, something that's extremely useful on boards that
can include varying flash sizes (e.g. 256MB vs 2GB).

Because we don't want to reuse code, I extracted the mkfs and ubinize
commands out to a new function that will handle the creation of both
multiple ubi's, as well as the 'ubi' FSTYPE (so as not to break current
boards).

Due to the single processes nature of the OE when doing it's
'create_image', this new multiubi_mkfs function also creates it's own
symlinks as well as cleans up it's own cfg file.

(From OE-Core rev: 1255476161f409a0999650c2c8bdaf36b1ba4b95)

Signed-off-by: Pushpal Sidhu <psidhu@gateworks.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Pushpal Sidhu
2015-04-24 17:32:22 -07:00
committed by Richard Purdie
parent d93171c060
commit 9238984340

View File

@@ -97,18 +97,48 @@ IMAGE_TYPEDEP_elf = "cpio.gz"
UBI_VOLNAME ?= "${MACHINE}-rootfs" UBI_VOLNAME ?= "${MACHINE}-rootfs"
IMAGE_CMD_ubi () { multiubi_mkfs() {
echo \[ubifs\] > ubinize.cfg local mkubifs_args="$1"
echo mode=ubi >> ubinize.cfg local ubinize_args="$2"
echo image=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs >> ubinize.cfg local vname="_$3"
echo vol_id=0 >> ubinize.cfg
echo vol_type=dynamic >> ubinize.cfg echo \[ubifs\] > ubinize${vname}.cfg
echo vol_name=${UBI_VOLNAME} >> ubinize.cfg echo mode=ubi >> ubinize${vname}.cfg
echo vol_flags=autoresize >> ubinize.cfg echo image=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}${vname}.rootfs.ubifs >> ubinize${vname}.cfg
mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS} echo vol_id=0 >> ubinize${vname}.cfg
ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${UBINIZE_ARGS} ubinize.cfg echo vol_type=dynamic >> ubinize${vname}.cfg
echo vol_name=${UBI_VOLNAME} >> ubinize${vname}.cfg
echo vol_flags=autoresize >> ubinize${vname}.cfg
mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}${vname}.rootfs.ubifs ${mkubifs_args}
ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}${vname}.rootfs.ubi ${ubinize_args} ubinize${vname}.cfg
# Cleanup cfg file
mv ubinize${vname}.cfg ${DEPLOY_DIR_IMAGE}/
# Create own symlink
cd ${DEPLOY_DIR_IMAGE}
if [ -e ${IMAGE_NAME}${vname}.rootfs.ubifs ]; then
ln -sf ${IMAGE_NAME}${vname}.rootfs.ubifs \
${IMAGE_LINK_NAME}${vname}.ubifs
fi
if [ -e ${IMAGE_NAME}${vname}.rootfs.ubi ]; then
ln -sf ${IMAGE_NAME}${vname}.rootfs.ubi \
${IMAGE_LINK_NAME}${vname}.ubi
fi
cd -
} }
IMAGE_TYPEDEP_ubi = "ubifs"
IMAGE_CMD_multiubi () {
# Split MKUBIFS_ARGS_<name> and UBINIZE_ARGS_<name>
for name in ${MULTIUBI_BUILD}; do
eval local mkubifs_args=\"\$MKUBIFS_ARGS_${name}\"
eval local ubinize_args=\"\$UBINIZE_ARGS_${name}\"
multiubi_mkfs "${mkubifs_args}" "${ubinize_args}" "${name}"
done
}
IMAGE_CMD_ubi = "multiubi_mkfs "${MKUBIFS_ARGS}" "${UBINIZE_ARGS}" "${UBI_VOLNAME}""
IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS}" IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS}"
@@ -139,6 +169,7 @@ IMAGE_DEPENDS_squashfs-lzo = "squashfs-tools-native"
IMAGE_DEPENDS_elf = "virtual/kernel mkelfimage-native" IMAGE_DEPENDS_elf = "virtual/kernel mkelfimage-native"
IMAGE_DEPENDS_ubi = "mtd-utils-native" IMAGE_DEPENDS_ubi = "mtd-utils-native"
IMAGE_DEPENDS_ubifs = "mtd-utils-native" IMAGE_DEPENDS_ubifs = "mtd-utils-native"
IMAGE_DEPENDS_multiubi = "mtd-utils-native"
# This variable is available to request which values are suitable for IMAGE_FSTYPES # This variable is available to request which values are suitable for IMAGE_FSTYPES
IMAGE_TYPES = " \ IMAGE_TYPES = " \
@@ -151,7 +182,7 @@ IMAGE_TYPES = " \
iso \ iso \
hddimg \ hddimg \
squashfs squashfs-xz squashfs-lzo \ squashfs squashfs-xz squashfs-lzo \
ubi ubifs \ ubi ubifs multiubi \
tar tar.gz tar.bz2 tar.xz tar.lz4 \ tar tar.gz tar.bz2 tar.xz tar.lz4 \
cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 \ cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 \
vmdk \ vmdk \