diff --git a/classes/ubi_multi_vol-chip.bbclass b/classes/ubi_multi_vol-chip.bbclass new file mode 100644 index 0000000..05ceeef --- /dev/null +++ b/classes/ubi_multi_vol-chip.bbclass @@ -0,0 +1,63 @@ +inherit image_types + +multiubivol_mkfs () { + local mkubifs_args="$1" + local additional_mkubifs_args="$2" + local additional_ubinize_args="$3" + local name="$4" + if [ -z "$5" ]; then + local vname="" + else + local vname="_$5" + fi + + echo \[${name}\] >> ubinize${vname}.cfg + echo ${additional_ubinize_args} >> ubinize${vname}.cfg + mkfs.ubifs ${additional_mkubifs_args} ${mkubifs_args} +} + +multiubivol_ubinize() { + if [ -z "$1" ]; then + local vname="" + else + local vname="_$1" + fi + 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 symlinks for 'named' volumes + if [ -n "$vname" ]; then + 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 - + fi +} + +IMAGE_CMD_multiubivol () { + + # Split MKUBIFS_ARGS_ and UBINIZE_ARGS_ + for name in ${UBIMULTIVOL_BUILD}; do + eval local mkubifs_args=\"\$MKUBIFS_ARGS_${name}\" + eval local additional_ubinize_args=\"\$ADDITIONAL_UBINIZE_ARGS_${name}\" + eval local additional_mkubifs_args=\"\$ADDITIONAL_MKUBIFS_ARGS_${name}\" + + multiubivol_mkfs "${mkubifs_args}" "${additional_mkubifs_args}" "${additional_ubinize_args}" "${name}" "${UBI_VOLNAME}" + done + multiubivol_ubinize ${UBI_VOLNAME} +} + +IMAGE_DEPENDS_multiubivol = "mtd-utils-native" + +# This variable is available to request which values are suitable for IMAGE_FSTYPES +IMAGE_TYPES = " \ + multiubivol \ + " diff --git a/conf/machine/chip.conf b/conf/machine/chip.conf index ff5a213..5ec28bb 100644 --- a/conf/machine/chip.conf +++ b/conf/machine/chip.conf @@ -34,3 +34,19 @@ UBI_VOLNAME = "rootfs" CHIP_UBI_PAGE_SIZE = "16384" MKUBIFS_ARGS = "--min-io-size ${CHIP_UBI_PAGE_SIZE} --leb-size 2064384 --max-leb-cnt 2000" UBINIZE_ARGS = "--min-io-size ${CHIP_UBI_PAGE_SIZE} --peb-size 2097152 --sub-page-size 16384" + +# # Required for multi_ubi_class +# IMAGE_CLASSES += "ubi_multi_vol-chip" + +# IMAGE_FSTYPES += "multiubivol" + +# UBIMULTIVOL_BUILD = "rootfs boot" +# UBI_VOLNAME = "ubi" +# UBINIZE_ARGS = "-m 0x4000 -p 0x200000 -s 16384" +# export MKUBIFS_ARGS_rootfs = "-e 0x1f8000 -c 500 -m 0x4000 -x lzo" +# export ADDITIONAL_MKUBIFS_ARGS_rootfs = "-r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs" +# export ADDITIONAL_UBINIZE_ARGS_rootfs = "mode=ubi\nimage=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs\nvol_id=0\nvol_type=dynamic\nvol_name=rootfs\nvol_flags=autoresize" + +# export MKUBIFS_ARGS_boot = "-e 0x1f8000 -c 500 -m 0x4000 -x lzo" +# export ADDITIONAL_MKUBIFS_ARGS_boot = "-r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.ubifs" +# export ADDITIONAL_UBINIZE_ARGS_boot = "mode=ubi\nimage=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.ubifs\nvol_id=3\nvol_type=dynamic\nvol_name=boot"