[Buildroot] [PATCH 3/3] fs/dracut: new fs type

Arnout Vandecappelle arnout at mind.be
Thu Dec 16 20:49:44 UTC 2021



On 15/12/2021 19:00, Thierry Bultel wrote:
> Adds an option to build an initramfs image,
> using the dracut host tool.
> 
> Signed-off-by: Thierry Bultel <thierry.bultel at linatsea.fr>
> ---
>   fs/Config.in        |  1 +
>   fs/dracut/Config.in | 13 +++++++++++
>   fs/dracut/dracut.mk | 55 +++++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 69 insertions(+)
>   create mode 100644 fs/dracut/Config.in
>   create mode 100644 fs/dracut/dracut.mk
> 
> diff --git a/fs/Config.in b/fs/Config.in
> index eee5e26bb2..3938f3b9a7 100644
> --- a/fs/Config.in
> +++ b/fs/Config.in
> @@ -5,6 +5,7 @@ source "fs/btrfs/Config.in"
>   source "fs/cloop/Config.in"
>   source "fs/cpio/Config.in"
>   source "fs/cramfs/Config.in"
> +source "fs/dracut/Config.in"
>   source "fs/erofs/Config.in"
>   source "fs/ext2/Config.in"
>   source "fs/f2fs/Config.in"
> diff --git a/fs/dracut/Config.in b/fs/dracut/Config.in
> new file mode 100644
> index 0000000000..ee4220def8
> --- /dev/null
> +++ b/fs/dracut/Config.in
> @@ -0,0 +1,13 @@
> +config BR2_TARGET_ROOTFS_DRACUT
> +	bool "Invoke dracut to make an initramfs"
> +	default n

  Don't add "default n", it's the default :-)

> +	select BR2_PACKAGE_HOST_DRACUT
> +	select BR2_PACKAGE_HOST_UBOOT_TOOLS
> +	help
> +	  Builds an additional initramfs using dracut. This can be useful to create a recovery system, for instance.
> +	
> +if BR2_TARGET_ROOTFS_DRACUT
> +config BR2_TARGET_ROOTFS_DRACUT_CONF_FILE
> +	string "configuration file"

  Is there a possibility for a default configuration file?

> +endif
> +
> diff --git a/fs/dracut/dracut.mk b/fs/dracut/dracut.mk
> new file mode 100644
> index 0000000000..9c91150e82
> --- /dev/null
> +++ b/fs/dracut/dracut.mk
> @@ -0,0 +1,55 @@
> +################################################################################
> +#
> +# dracut to archive target filesystem
> +#
> +################################################################################
> +
> +ROOTFS_DRACUT_DEPENDENCIES = host-dracut host-uboot-tools
> +
> +ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
> +
> +define ROOTFS_DRACUT_ADD_INIT
> +	if [ ! -e $(TARGET_DIR)/init ]; then \
> +		ln -sf sbin/init $(TARGET_DIR)/init; \
> +	fi
> +endef
> +
> +else
> +
> +# devtmpfs does not get automounted when initramfs is used.
> +# Add a pre-init script to mount it before running init
> +# We must have /dev/console very early, even before /init runs,
> +# for stdin/stdout/stderr
> +define ROOTFS_DRACUT_ADD_INIT
> +	if [ ! -e $(TARGET_DIR)/init ]; then \
> +		$(INSTALL) -m 0755 fs/cpio/init $(TARGET_DIR)/init; \
> +	fi
> +	mkdir -p $(TARGET_DIR)/dev
> +	mknod -m 0622 $(TARGET_DIR)/dev/console c 5 1
> +endef
> +
> +endif # BR2_ROOTFS_DEVICE_CREATION_STATIC

  The above is the same logic as in cpio.mk. It would be better if we could 
refactor that to a common place.

> +
> +ROOTFS_DRACUT_PRE_GEN_HOOKS += ROOTFS_DRACUT_ADD_INIT
> +
> +define ROOTFS_DRACUT_CMD
> +
> +	mkdir -p $(@D)/tmp
> +	rm -rf $(@D)/tmp/*
> +
> +	DRACUT_LDD=$(TARGET_CROSS)ldd \
> +	DRACUT_INSTALL="$(HOST_DIR)/lib/dracut/dracut-install"\
> +	dracutbasedir=$(HOST_DIR)/usr/lib/dracut \

  It would be nice if all of the above could be patches into host-dracut, so 
when called from a post-image script, it's not needed to pass all of that in.

  You should also check then if it gets properly updated by 
support/misc/relocate-sdk.sh (I think yes).


> +	dracutsysrootdir=$(TARGET_DIR) \
> +	$(HOST_DIR)/bin/dracut \
> +	--kver $(BR2_LINUX_KERNEL_VERSION).0 \

  This should be indented with a second tab.

  Also, you can't use BR2_LINUX_KERNEL_VERSION because that's only available if 
BR2_LINUX_KERNEL=y. So either you have to depend on that, or you need to add an 
option to Config.in to be able to set it. Also, you should probably use 
LINUX_VERSION_PROBED instead (at least if you need an actual kernel version, and 
not some commit hash or something). Also, what is the .0 appended to it?


> +	-c $(BR2_TARGET_ROOTFS_DRACUT_CONF_FILE) \

  We normally have a check in the makefile to exit immediately if the option is 
not set. See for example in linux-backports. Note that it needs to be in a 
BR_BUILDING condition.


  Regards,
  Arnout

> +	--tmpdir $(@D)/tmp \
> +	-M \
> +	--force \
> +	--keep \
> +	$@
> +
> +endef
> +
> +$(eval $(rootfs))
> 



More information about the buildroot mailing list