[OE-core] [PATCH] image_types: add support for modern f2fs flash filesystem

Andre McCurdy armccurdy at gmail.com
Wed Dec 6 02:42:53 UTC 2017


On Tue, Dec 5, 2017 at 3:27 PM, Saul Wold <sgw at linux.intel.com> wrote:
> The f2fs filesystem is a newer flash filesystem that is available in
> meta-filesystems. This needs a minimum sized blank space to operate
> in correctly.
>
> The f2fs has overprovision functionality and when building smaller
> filesystems, you actually need more space, therefore under 500M (or so)
> double the amount of space needed in order to handle the overprovision
> functions in f2fs.
>
> Signed-off-by: Saul Wold <sgw at linux.intel.com>
> ---
>  meta/classes/image_types.bbclass | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/meta/classes/image_types.bbclass b/meta/classes/image_types.bbclass
> index d09d1277eaa..aaba1073a08 100644
> --- a/meta/classes/image_types.bbclass
> +++ b/meta/classes/image_types.bbclass
> @@ -218,6 +218,24 @@ IMAGE_CMD_ubi () {
>
>  IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.ubifs ${MKUBIFS_ARGS}"
>
> +MKF2FS_ARGS = ""
> +FIX_F2FS_SIZE ?= "524288"
> +IMAGE_CMD_f2fs () {
> +        # We need to add additional smarts here form devices smaller than 1.5G
> +        # Need to scale appropriately between 40M -> 1.5G as the "overprovision
> +        # ratio" goes down as the device gets bigger (70% -> 4.5%), below about
> +        # 500M the standard IMAGE_OVERHEAD_FACTOR does not work, so add additional
> +        # space here when under 500M
> +       size=${ROOTFS_SIZE}
> +       if [ ${size} -lt ${FIX_F2FS_SIZE} ] ; then
> +               size=`expr ${size}*2`
> +               bbwarn "Rootfs size is too small for F2FS. Filesystem will be extended to ${size}K"
> +       fi
> +       dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs count=${size} bs=1024

The equivalent dd command in oe_mkext234fs() creates a sparse file.
Any reason not to do so here (and in IMAGE_CMD_btrfs()) ?

> +       mkfs.f2fs ${MKF2FS_ARGS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs
> +       sload.f2fs -f ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs
> +}
> +
>  EXTRA_IMAGECMD = ""
>
>  inherit siteinfo kernel-arch
> @@ -231,6 +249,7 @@ EXTRA_IMAGECMD_ext3 ?= "-i 4096"
>  EXTRA_IMAGECMD_ext4 ?= "-i 4096"
>  EXTRA_IMAGECMD_btrfs ?= "-n 4096"
>  EXTRA_IMAGECMD_elf ?= ""
> +EXTRA_IMAGECMD_f2fs ?= ""

This probably doesn't need to be defined (since IMAGE_CMD_f2fs() uses
MKF2FS_ARGS to pass custom arguments, rather than using EXTRA_IMAGECMD
as the other image commands do) ?

>  do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot"
>  do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot"
> @@ -246,6 +265,7 @@ do_image_elf[depends] += "virtual/kernel:do_populate_sysroot mkelfimage-native:d
>  do_image_ubi[depends] += "mtd-utils-native:do_populate_sysroot"
>  do_image_ubifs[depends] += "mtd-utils-native:do_populate_sysroot"
>  do_image_multiubi[depends] += "mtd-utils-native:do_populate_sysroot"
> +do_image_f2fs[depends] += "f2fs-tools-native:do_populate_sysroot"
>
>  # This variable is available to request which values are suitable for IMAGE_FSTYPES
>  IMAGE_TYPES = " \
> @@ -264,6 +284,7 @@ IMAGE_TYPES = " \
>      elf \
>      wic wic.gz wic.bz2 wic.lzma \
>      container \
> +    f2fs \
>  "
>
>  # Compression is a special case of conversion. The old variable
> --
> 2.13.6
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core



More information about the Openembedded-core mailing list