[Buildroot] [PATCH 1/1] package/mke2img: use mkfs to generate rootfs image

Yann E. MORIN yann.morin.1998 at free.fr
Sat Mar 18 14:30:54 UTC 2017


Sébastien, All,

On 2017-03-02 10:06 +0100, Sébastien Szymanski spake thusly:
> mkfs is now capable of generating rootfs images. Use mkfs intead of
> genext2fs.
> 
> Signed-off-by: Sébastien Szymanski <sebastien.szymanski at armadeus.com>

So, to sumarize the discussion in this thread, and a discussion Thomas,
Arnout and I just had on IRC:

 1. mke2fs can't auto-calculate the size;

 2. auto-calculation is inherently flawed, because it relies on the host
    filesystem specifics;

 3. so we want the user to be responsible for specifying the exact size
    he wants for his extfs;

 4. we don't care much about generating filesystems that are bckward
    identical (i.e. we don;t care if the enerated filesystem does not
    have the same feature set as was previously done);

 5. except we want to drop features that make it incompatible with older
    U-Boot or other bootlaoders, or older kernels, but that should be
    optional.

 6. can we kill most of mke2img, or can we even kill it altogether? ;-)

Thanks!

Regards,
Yann E. MORIN.

> ---
>  package/mke2img/Config.in.host |  1 -
>  package/mke2img/mke2img        | 58 +++++++++++++++++-------------------------
>  package/mke2img/mke2img.mk     |  2 +-
>  3 files changed, 25 insertions(+), 36 deletions(-)
> 
> diff --git a/package/mke2img/Config.in.host b/package/mke2img/Config.in.host
> index b5bcb84..f252715 100644
> --- a/package/mke2img/Config.in.host
> +++ b/package/mke2img/Config.in.host
> @@ -1,7 +1,6 @@
>  config BR2_PACKAGE_HOST_MKE2IMG
>  	bool "host mke2img"
>  	select BR2_PACKAGE_HOST_E2FSPROGS
> -	select BR2_PACKAGE_HOST_GENEXT2FS
>  	help
>  	  Easily create filesystems of the extend familly: ext2/3/4.
>  
> diff --git a/package/mke2img/mke2img b/package/mke2img/mke2img
> index c2e0d02..15b7246 100755
> --- a/package/mke2img/mke2img
> +++ b/package/mke2img/mke2img
> @@ -10,9 +10,8 @@ set -e
>  main() {
>      local OPT OPTARG
>      local nb_blocks nb_inodes nb_res_blocks root_dir image gen rev label uuid
> -    local -a genext2fs_opts
> -    local -a tune2fs_opts
> -    local tune2fs_O_opts
> +    local -a mkfs_opts
> +    local mkfs_O_opts
>  
>      # Default values
>      gen=2
> @@ -82,55 +81,51 @@ main() {
>  
>      # Upgrade to rev1 if needed
>      if [ ${rev} -ge 1 ]; then
> -        tune2fs_O_opts+=",filetype,sparse_super"
> +        mkfs_O_opts+=",filetype,sparse_super"
>      fi
>  
>      # Add a journal for ext3 and above
> +    # resize_inode for online resizing
>      if [ ${gen} -ge 3 ]; then
> -        tune2fs_opts+=( -j -J size=1 )
> +        mkfs_opts+=( -j -J size=1 )
> +        mkfs_O_opts+=",resize_inode"
>      fi
>  
>      # Add ext4 specific features
>      if [ ${gen} -ge 4 ]; then
> -        tune2fs_O_opts+=",extents,uninit_bg,dir_index"
> +        mkfs_O_opts+=",extents,uninit_bg,dir_index"
>      fi
>  
> +    # Disable some defaults features
> +    mkfs_O_opts+=",^ext_attr,^64bit,^flex_bg,^large_file,^huge_file,^dir_nlink,^extra_isize"
> +
>      # Add our -O options (there will be at most one leading comma, remove it)
> -    if [ -n "${tune2fs_O_opts}" ]; then
> -        tune2fs_opts+=( -O "${tune2fs_O_opts#,}" )
> +    if [ -n "${mkfs_O_opts}" ]; then
> +        mkfs_opts+=( -O "${mkfs_O_opts#,}" )
>      fi
>  
>      # Add the label if specified
>      if [ -n "${label}" ]; then
> -        tune2fs_opts+=( -L "${label}" )
> +        mkfs_opts+=( -L "${label}" )
>      fi
>  
> -    # Generate the filesystem
> -    genext2fs_opts=( -z -b ${nb_blocks} -N ${nb_inodes} -d "${root_dir}" )
> -    if [ -n "${nb_res_blocks}" ]; then
> -        genext2fs_opts+=( -m ${nb_res_blocks} )
> -    fi
> -    genext2fs "${genext2fs_opts[@]}" "${image}"
> -
> -    # genext2fs does not generate a UUID, but fsck will whine if one
> -    # is missing, so we need to add a UUID.
> -    # Of course, this has to happen _before_ we run fsck.
> -    # Also, some ext4 metadata are based on the UUID, so we must
> -    # set it before we can convert the filesystem to ext4.
> -    # If the user did not specify a UUID, we generate a random one.
> +    # If the user did not specify a UUID, mkfs will generate a random one.
>      # Although a random UUID may seem bad for reproducibility, there
>      # already are so many things that are not reproducible in a
>      # filesystem: file dates, file ordering, content of the files...
> -    tune2fs -U "${uuid:-random}" "${image}"
> +    if [ -n "${UUID}" ]; then
> +        mkfs_opts+=( -U "${UUID}" )
> +    fi
>  
> -    # Upgrade the filesystem
> -    if [ ${#tune2fs_opts[@]} -ne 0 ]; then
> -        tune2fs "${tune2fs_opts[@]}" "${image}"
> +    # Generate the filesystem
> +    mkfs_opts+=( -d "${root_dir}" -N ${nb_inodes} -T small -F )
> +    if [ -n "${nb_res_block}" ]; then
> +        mkfs_opts+=( -m ${nb_res_blocks} )
>      fi
> +    mkfs.ext${gen} "${mkfs_opts[@]}" "${image}" "${nb_blocks}"
>  
> -    # After changing filesystem options, running fsck is required
> -    # (see: man tune2fs). Running e2fsck in other cases will ensure
> -    # coherency of the filesystem, although it is not required.
> +    # Running e2fsck will ensure coherency of the filesystem,
> +    # although it is not required.
>      # 'e2fsck -pDf' means:
>      #  - automatically repair
>      #  - optimise and check for duplicate entries
> @@ -149,11 +144,6 @@ main() {
>      printf "\n"
>      trace "e2fsck was successfully run on '%s' (ext%d)\n" "${image}" ${gen}
>      printf "\n"
> -
> -    # Remove count- and time-based checks, they are not welcome
> -    # on embedded devices, where they can cause serious boot-time
> -    # issues by tremendously slowing down the boot.
> -    tune2fs -c 0 -i 0 "${image}"
>  }
>  
>  help() {
> diff --git a/package/mke2img/mke2img.mk b/package/mke2img/mke2img.mk
> index 9de387a..ead9d70 100644
> --- a/package/mke2img/mke2img.mk
> +++ b/package/mke2img/mke2img.mk
> @@ -4,7 +4,7 @@
>  #
>  ################################################################################
>  
> -HOST_MKE2IMG_DEPENDENCIES = host-genext2fs host-e2fsprogs
> +HOST_MKE2IMG_DEPENDENCIES = host-e2fsprogs
>  
>  define HOST_MKE2IMG_INSTALL_CMDS
>  	$(INSTALL) -D -m 0755 package/mke2img/mke2img $(HOST_DIR)/usr/bin/mke2img
> -- 
> 2.7.3
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list