diff mbox

[v3,09/11] fs/ext2: use mkfs to generate rootfs image

Message ID 20170703225106.1492-10-s.martin49@gmail.com
State Superseded
Headers show

Commit Message

Samuel Martin July 3, 2017, 10:51 p.m. UTC
From: Sébastien Szymanski <sebastien.szymanski@armadeus.com>

mkfs is now capable of generating rootfs images. Use mkfs instead of
genext2fs.

If not set, we now let mkfs calculate the block size and the number of
inodes needed.

This change also adjusts the options to meet those of mkfs. Note that
passing a null inode number to mkfs triggers its automatic calculation.

The BR2_TARGET_ROOTFS_EXT2_BLOCKS symbol is ranamed as well, into
BR2_TARGET_ROOTFS_EXT2_SIZE, since it now accepts the same values as the
mkfs' fs-size argument (i.e. with k, m, g or t suffix).

Signed-off-by: Sébastien Szymanski <sebastien.szymanski@armadeus.com>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>

---
changes v2->v3:
- reword commit log

changes v1->v2:
- rebase
- add default size value
---
 Config.in.legacy  |  8 ++++++++
 fs/ext2/Config.in | 21 +++++++++++----------
 fs/ext2/ext2.mk   | 23 ++++++++++++++---------
 3 files changed, 33 insertions(+), 19 deletions(-)

Comments

Samuel Martin July 4, 2017, 9:37 a.m. UTC | #1
All,

On Tue, Jul 4, 2017 at 12:51 AM, Samuel Martin <s.martin49@gmail.com> wrote:
> From: Sébastien Szymanski <sebastien.szymanski@armadeus.com>
>
> mkfs is now capable of generating rootfs images. Use mkfs instead of
> genext2fs.
>
> If not set, we now let mkfs calculate the block size and the number of
> inodes needed.
>
> This change also adjusts the options to meet those of mkfs. Note that
> passing a null inode number to mkfs triggers its automatic calculation.
>
> The BR2_TARGET_ROOTFS_EXT2_BLOCKS symbol is ranamed as well, into
> BR2_TARGET_ROOTFS_EXT2_SIZE, since it now accepts the same values as the
> mkfs' fs-size argument (i.e. with k, m, g or t suffix).
>
> Signed-off-by: Sébastien Szymanski <sebastien.szymanski@armadeus.com>
> Signed-off-by: Samuel Martin <s.martin49@gmail.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
>
> ---
> changes v2->v3:
> - reword commit log
>
> changes v1->v2:
> - rebase
> - add default size value
> ---
>  Config.in.legacy  |  8 ++++++++
>  fs/ext2/Config.in | 21 +++++++++++----------
>  fs/ext2/ext2.mk   | 23 ++++++++++++++---------
>  3 files changed, 33 insertions(+), 19 deletions(-)
>
> diff --git a/Config.in.legacy b/Config.in.legacy
> index 5efe0d1ba0..68275f9e0e 100644
> --- a/Config.in.legacy
> +++ b/Config.in.legacy
> @@ -145,6 +145,14 @@ endif
>  ###############################################################################
>  comment "Legacy options removed in 2017.08"
>
> +config BR2_TARGET_ROOTFS_EXT2_BLOCKS
> +       int "exact size in blocks has been removed"
> +       default 0
> +       help
> +         This option has been removed in favor of BR2_TARGET_ROOTFS_EXT2_SIZE.
> +
> +# Note: BR2_TARGET_ROOTFS_EXT2_BLOCKS still reference in fs/ext2/Config.in
> +
>  config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES
>         int "extra inodes has been removed" if BR2_TARGET_ROOTFS_EXT2_INODES = 0
>         default 0
> diff --git a/fs/ext2/Config.in b/fs/ext2/Config.in
> index 0071ba2bec..9850823e10 100644
> --- a/fs/ext2/Config.in
> +++ b/fs/ext2/Config.in
> @@ -1,6 +1,6 @@
>  config BR2_TARGET_ROOTFS_EXT2
>         bool "ext2/3/4 root filesystem"
> -       select BR2_PACKAGE_HOST_MKE2IMG
> +       select BR2_PACKAGE_HOST_E2FSPROGS
>         help
>           Build an ext2/3/4 root filesystem
>
> @@ -66,19 +66,20 @@ config BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE
>         default 2048 if BR2_TARGET_ROOTFS_EXT2_BLOCK_2048
>         default 4096 if BR2_TARGET_ROOTFS_EXT2_BLOCK_4096
>
> -# 61440 block od 1024 bytes = 60MB, i.e usually small enough to fit
> -# on a 64MB media
> -config BR2_TARGET_ROOTFS_EXT2_BLOCKS
> -       int "exact size in blocks"
> -       default 61440
> -       help
> -         Specify the file system size as a number of blocks, which
> -         size is specified above.
> -
>  config BR2_TARGET_ROOTFS_EXT2_INODES
>         int "exact number of inodes (leave at 0 for auto calculation)"
>         default 0
>
> +config BR2_TARGET_ROOTFS_EXT2_SIZE
> +       string "exact size"
> +       default BR2_TARGET_ROOTFS_EXT2_BLOCKS if BR2_TARGET_ROOTFS_EXT2_BLOCKS != 0 # legacy 2017.08
> +       default "60M" # default size
> +       help
> +         The size of the filesystem image. If it does not have a suffix, it is
> +         interpreted as power-of-two kilobytes. If it is suffixed by 'k', 'm',
> +         'g', 't' (either upper-case or lower-case), then it is interpreted in
> +         power-of-two kilobytes, megabytes, gigabytes, terabytes, etc.
> +
>  config BR2_TARGET_ROOTFS_EXT2_RESBLKS
>         int "reserved blocks percentage"
>         default 5
> diff --git a/fs/ext2/ext2.mk b/fs/ext2/ext2.mk
> index 24643afeb9..bc366bc689 100644
> --- a/fs/ext2/ext2.mk
> +++ b/fs/ext2/ext2.mk
> @@ -4,24 +4,29 @@
>  #
>  ################################################################################
>
> +EXT2_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_EXT2_SIZE))
> +ifeq ($(EXT2_SIZE),)

Here, a check on BR2_TARGET_ROOTFS_EXT is missing to prevent the size
check from failing when ext* rootfs is disabled.

> +$(error BR2_TARGET_ROOTFS_EXT2_SIZE cannot be empty)
> +endif
> +
>  # qstrip results in stripping consecutive spaces into a single one. So the
>  # variable is not qstrip-ed to preserve the integrity of the string value.
>  EXT2_LABEL := $(subst ",,$(BR2_TARGET_ROOTFS_EXT2_LABEL))
>  #" Syntax highlighting... :-/ )
>
>  EXT2_OPTS = \
> -       -G $(BR2_TARGET_ROOTFS_EXT2_GEN) \
> -       -R $(BR2_TARGET_ROOTFS_EXT2_REV) \
> -       -B $(BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE) \
> -       -b $(BR2_TARGET_ROOTFS_EXT2_BLOCKS) \
> -       -i $(BR2_TARGET_ROOTFS_EXT2_INODES) \
> -       -r $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \
> -       -l "$(EXT2_LABEL)"
> +       -d $(TARGET_DIR) \
> +       -r $(BR2_TARGET_ROOTFS_EXT2_REV) \
> +       -b $(BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE) \
> +       -N $(BR2_TARGET_ROOTFS_EXT2_INODES) \
> +       -m $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \
> +       -L "$(EXT2_LABEL)"
>
> -ROOTFS_EXT2_DEPENDENCIES = host-mke2img
> +ROOTFS_EXT2_DEPENDENCIES = host-e2fsprogs
>
>  define ROOTFS_EXT2_CMD
> -       PATH=$(BR_PATH) mke2img -d $(TARGET_DIR) $(EXT2_OPTS) -o $@
> +       rm -f $@
> +       PATH=$(BR_PATH) mkfs.ext$(BR2_TARGET_ROOTFS_EXT2_GEN) $(EXT2_OPTS) $@ $(EXT2_SIZE)
>  endef
>
>  rootfs-ext2-symlink:
> --
> 2.13.2
>
Arnout Vandecappelle July 4, 2017, 11:36 a.m. UTC | #2
Can this patch be split up into

1/ use mkfs to generate rootfs image

2/ replace BR2_TARGET_ROOTFS_EXT2_BLOCKS with BR2_TARGET_ROOTFS_EXT2_SIZE

?

 The latter patch will also have to be combined with fixing up the 8 defconfigs
that use this option.

On 04-07-17 00:51, Samuel Martin wrote:
> From: Sébastien Szymanski <sebastien.szymanski@armadeus.com>
> 
> mkfs is now capable of generating rootfs images. Use mkfs instead of
> genext2fs.
> 
> If not set, we now let mkfs calculate the block size and the number of
> inodes needed.
> 
> This change also adjusts the options to meet those of mkfs. Note that
> passing a null inode number to mkfs triggers its automatic calculation.
> 
> The BR2_TARGET_ROOTFS_EXT2_BLOCKS symbol is ranamed as well, into
> BR2_TARGET_ROOTFS_EXT2_SIZE, since it now accepts the same values as the
> mkfs' fs-size argument (i.e. with k, m, g or t suffix).
> 
> Signed-off-by: Sébastien Szymanski <sebastien.szymanski@armadeus.com>
> Signed-off-by: Samuel Martin <s.martin49@gmail.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
> 
> ---
> changes v2->v3:
> - reword commit log
> 
> changes v1->v2:
> - rebase
> - add default size value
> ---
>  Config.in.legacy  |  8 ++++++++
>  fs/ext2/Config.in | 21 +++++++++++----------
>  fs/ext2/ext2.mk   | 23 ++++++++++++++---------
>  3 files changed, 33 insertions(+), 19 deletions(-)
> 
> diff --git a/Config.in.legacy b/Config.in.legacy
> index 5efe0d1ba0..68275f9e0e 100644
> --- a/Config.in.legacy
> +++ b/Config.in.legacy
> @@ -145,6 +145,14 @@ endif
>  ###############################################################################
>  comment "Legacy options removed in 2017.08"
>  
> +config BR2_TARGET_ROOTFS_EXT2_BLOCKS
> +	int "exact size in blocks has been removed"
> +	default 0
> +	help
> +	  This option has been removed in favor of BR2_TARGET_ROOTFS_EXT2_SIZE.

 Again BR2_LEGACY is not selected.

> +
> +# Note: BR2_TARGET_ROOTFS_EXT2_BLOCKS still reference in fs/ext2/Config.in
> +
>  config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES
>  	int "extra inodes has been removed" if BR2_TARGET_ROOTFS_EXT2_INODES = 0
>  	default 0
> diff --git a/fs/ext2/Config.in b/fs/ext2/Config.in
> index 0071ba2bec..9850823e10 100644
> --- a/fs/ext2/Config.in
> +++ b/fs/ext2/Config.in
> @@ -1,6 +1,6 @@
>  config BR2_TARGET_ROOTFS_EXT2
>  	bool "ext2/3/4 root filesystem"
> -	select BR2_PACKAGE_HOST_MKE2IMG
> +	select BR2_PACKAGE_HOST_E2FSPROGS
>  	help
>  	  Build an ext2/3/4 root filesystem
>  
> @@ -66,19 +66,20 @@ config BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE
>  	default 2048 if BR2_TARGET_ROOTFS_EXT2_BLOCK_2048
>  	default 4096 if BR2_TARGET_ROOTFS_EXT2_BLOCK_4096
>  
> -# 61440 block od 1024 bytes = 60MB, i.e usually small enough to fit
> -# on a 64MB media
> -config BR2_TARGET_ROOTFS_EXT2_BLOCKS
> -	int "exact size in blocks"
> -	default 61440
> -	help
> -	  Specify the file system size as a number of blocks, which
> -	  size is specified above.
> -
>  config BR2_TARGET_ROOTFS_EXT2_INODES
>  	int "exact number of inodes (leave at 0 for auto calculation)"
>  	default 0
>  
> +config BR2_TARGET_ROOTFS_EXT2_SIZE

 Admittedly this keeps things alphabetical, but I still think it makes more
sense to have size first and inodes afterwards.

> +	string "exact size"
> +	default BR2_TARGET_ROOTFS_EXT2_BLOCKS if BR2_TARGET_ROOTFS_EXT2_BLOCKS != 0 # legacy 2017.08
> +	default "60M" # default size
> +	help
> +	  The size of the filesystem image. If it does not have a suffix, it is
> +	  interpreted as power-of-two kilobytes. If it is suffixed by 'k', 'm',

 So actually, it is NOT the same as the legacy BR2_TARGET_ROOTFS_EXT2_BLOCKS
because that one was not kilobytes but blocks, and there was the option to use
2K or 4K blocks... Oh, but of course, for legacy purposes, it actually *was* 1K
blocks. So OK.


 Regards,
 Arnout


> +	  'g', 't' (either upper-case or lower-case), then it is interpreted in
> +	  power-of-two kilobytes, megabytes, gigabytes, terabytes, etc.
> +
>  config BR2_TARGET_ROOTFS_EXT2_RESBLKS
>  	int "reserved blocks percentage"
>  	default 5
> diff --git a/fs/ext2/ext2.mk b/fs/ext2/ext2.mk
> index 24643afeb9..bc366bc689 100644
> --- a/fs/ext2/ext2.mk
> +++ b/fs/ext2/ext2.mk
> @@ -4,24 +4,29 @@
>  #
>  ################################################################################
>  
> +EXT2_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_EXT2_SIZE))
> +ifeq ($(EXT2_SIZE),)
> +$(error BR2_TARGET_ROOTFS_EXT2_SIZE cannot be empty)
> +endif
> +
>  # qstrip results in stripping consecutive spaces into a single one. So the
>  # variable is not qstrip-ed to preserve the integrity of the string value.
>  EXT2_LABEL := $(subst ",,$(BR2_TARGET_ROOTFS_EXT2_LABEL))
>  #" Syntax highlighting... :-/ )
>  
>  EXT2_OPTS = \
> -	-G $(BR2_TARGET_ROOTFS_EXT2_GEN) \
> -	-R $(BR2_TARGET_ROOTFS_EXT2_REV) \
> -	-B $(BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE) \
> -	-b $(BR2_TARGET_ROOTFS_EXT2_BLOCKS) \
> -	-i $(BR2_TARGET_ROOTFS_EXT2_INODES) \
> -	-r $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \
> -	-l "$(EXT2_LABEL)"
> +	-d $(TARGET_DIR) \
> +	-r $(BR2_TARGET_ROOTFS_EXT2_REV) \
> +	-b $(BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE) \
> +	-N $(BR2_TARGET_ROOTFS_EXT2_INODES) \
> +	-m $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \
> +	-L "$(EXT2_LABEL)"
>  
> -ROOTFS_EXT2_DEPENDENCIES = host-mke2img
> +ROOTFS_EXT2_DEPENDENCIES = host-e2fsprogs
>  
>  define ROOTFS_EXT2_CMD
> -	PATH=$(BR_PATH) mke2img -d $(TARGET_DIR) $(EXT2_OPTS) -o $@
> +	rm -f $@
> +	PATH=$(BR_PATH) mkfs.ext$(BR2_TARGET_ROOTFS_EXT2_GEN) $(EXT2_OPTS) $@ $(EXT2_SIZE)
>  endef
>  
>  rootfs-ext2-symlink:
>
diff mbox

Patch

diff --git a/Config.in.legacy b/Config.in.legacy
index 5efe0d1ba0..68275f9e0e 100644
--- a/Config.in.legacy
+++ b/Config.in.legacy
@@ -145,6 +145,14 @@  endif
 ###############################################################################
 comment "Legacy options removed in 2017.08"
 
+config BR2_TARGET_ROOTFS_EXT2_BLOCKS
+	int "exact size in blocks has been removed"
+	default 0
+	help
+	  This option has been removed in favor of BR2_TARGET_ROOTFS_EXT2_SIZE.
+
+# Note: BR2_TARGET_ROOTFS_EXT2_BLOCKS still reference in fs/ext2/Config.in
+
 config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES
 	int "extra inodes has been removed" if BR2_TARGET_ROOTFS_EXT2_INODES = 0
 	default 0
diff --git a/fs/ext2/Config.in b/fs/ext2/Config.in
index 0071ba2bec..9850823e10 100644
--- a/fs/ext2/Config.in
+++ b/fs/ext2/Config.in
@@ -1,6 +1,6 @@ 
 config BR2_TARGET_ROOTFS_EXT2
 	bool "ext2/3/4 root filesystem"
-	select BR2_PACKAGE_HOST_MKE2IMG
+	select BR2_PACKAGE_HOST_E2FSPROGS
 	help
 	  Build an ext2/3/4 root filesystem
 
@@ -66,19 +66,20 @@  config BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE
 	default 2048 if BR2_TARGET_ROOTFS_EXT2_BLOCK_2048
 	default 4096 if BR2_TARGET_ROOTFS_EXT2_BLOCK_4096
 
-# 61440 block od 1024 bytes = 60MB, i.e usually small enough to fit
-# on a 64MB media
-config BR2_TARGET_ROOTFS_EXT2_BLOCKS
-	int "exact size in blocks"
-	default 61440
-	help
-	  Specify the file system size as a number of blocks, which
-	  size is specified above.
-
 config BR2_TARGET_ROOTFS_EXT2_INODES
 	int "exact number of inodes (leave at 0 for auto calculation)"
 	default 0
 
+config BR2_TARGET_ROOTFS_EXT2_SIZE
+	string "exact size"
+	default BR2_TARGET_ROOTFS_EXT2_BLOCKS if BR2_TARGET_ROOTFS_EXT2_BLOCKS != 0 # legacy 2017.08
+	default "60M" # default size
+	help
+	  The size of the filesystem image. If it does not have a suffix, it is
+	  interpreted as power-of-two kilobytes. If it is suffixed by 'k', 'm',
+	  'g', 't' (either upper-case or lower-case), then it is interpreted in
+	  power-of-two kilobytes, megabytes, gigabytes, terabytes, etc.
+
 config BR2_TARGET_ROOTFS_EXT2_RESBLKS
 	int "reserved blocks percentage"
 	default 5
diff --git a/fs/ext2/ext2.mk b/fs/ext2/ext2.mk
index 24643afeb9..bc366bc689 100644
--- a/fs/ext2/ext2.mk
+++ b/fs/ext2/ext2.mk
@@ -4,24 +4,29 @@ 
 #
 ################################################################################
 
+EXT2_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_EXT2_SIZE))
+ifeq ($(EXT2_SIZE),)
+$(error BR2_TARGET_ROOTFS_EXT2_SIZE cannot be empty)
+endif
+
 # qstrip results in stripping consecutive spaces into a single one. So the
 # variable is not qstrip-ed to preserve the integrity of the string value.
 EXT2_LABEL := $(subst ",,$(BR2_TARGET_ROOTFS_EXT2_LABEL))
 #" Syntax highlighting... :-/ )
 
 EXT2_OPTS = \
-	-G $(BR2_TARGET_ROOTFS_EXT2_GEN) \
-	-R $(BR2_TARGET_ROOTFS_EXT2_REV) \
-	-B $(BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE) \
-	-b $(BR2_TARGET_ROOTFS_EXT2_BLOCKS) \
-	-i $(BR2_TARGET_ROOTFS_EXT2_INODES) \
-	-r $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \
-	-l "$(EXT2_LABEL)"
+	-d $(TARGET_DIR) \
+	-r $(BR2_TARGET_ROOTFS_EXT2_REV) \
+	-b $(BR2_TARGET_ROOTFS_EXT2_BLOCK_SIZE) \
+	-N $(BR2_TARGET_ROOTFS_EXT2_INODES) \
+	-m $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \
+	-L "$(EXT2_LABEL)"
 
-ROOTFS_EXT2_DEPENDENCIES = host-mke2img
+ROOTFS_EXT2_DEPENDENCIES = host-e2fsprogs
 
 define ROOTFS_EXT2_CMD
-	PATH=$(BR_PATH) mke2img -d $(TARGET_DIR) $(EXT2_OPTS) -o $@
+	rm -f $@
+	PATH=$(BR_PATH) mkfs.ext$(BR2_TARGET_ROOTFS_EXT2_GEN) $(EXT2_OPTS) $@ $(EXT2_SIZE)
 endef
 
 rootfs-ext2-symlink: