From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2] Add support for custom initramfs contents
Date: Thu, 1 Aug 2019 10:50:52 +0200 [thread overview]
Message-ID: <20190801085052.GA3447@scaer> (raw)
In-Reply-To: <20180825195152.25669-1-richard.kunze@web.de>
Richard, All,
On 2018-08-25 21:51 +0200, Richard Kunze spake thusly:
> This adds an option to build an initramfs image with different content
> than the rootfs within a single defconig. The intended use case is to
> provide a minimal early userland for systems that cannot mount their
> root file system directly from the kernel (e.g. because that rootfs
> resides in an image file on a FAT formatted SD card, which has to be
> mounted first before the rootfs can be set up).
>
> The rationale for implementing this as an option for initramfs instead
> of using two different configurations is ease of use: One configuration
> is easier to maintain and builds faster than two.
We discussed this change during the developpers meeting, and we all
concluded that we did not want this, as I explaiend in my previous
review.
Regards,
Yann E. MORIN.
> Signed-off-by: Richard Kunze <richard.kunze@web.de>
> ---
> fs/initramfs/Config.in | 34 +++++++++++++++++++++++++++++++++-
> fs/initramfs/initramfs.mk | 18 +++++++++++++++++-
> linux/linux.mk | 8 ++++----
> 3 files changed, 54 insertions(+), 6 deletions(-)
>
> diff --git a/fs/initramfs/Config.in b/fs/initramfs/Config.in
> index 9d5a3f92e6..9b7ac9475e 100644
> --- a/fs/initramfs/Config.in
> +++ b/fs/initramfs/Config.in
> @@ -1,6 +1,22 @@
> config BR2_TARGET_ROOTFS_INITRAMFS
> bool "initial RAM filesystem linked into linux kernel"
> depends on BR2_LINUX_KERNEL
> + help
> + Integrate an initramfs inside the kernel image.
> + This integration will take place automatically.
> +
> + The initramfs contents can either be the full root filesystem
> + generated by buildroot, or an image built from a custom list
> + of files specified via the BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM_CONTENTS
> + config option.
> +
> +choice
> + prompt "initial RAM filesystem contents"
> + depends on BR2_TARGET_ROOTFS_INITRAMFS
> +
> +config BR2_TARGET_ROOTFS_INITRAMFS_ROOTFS
> + bool "rootfs.cpio"
> + depends on BR2_TARGET_ROOTFS_INITRAMFS
> select BR2_TARGET_ROOTFS_CPIO
> help
> Integrate the root filesystem generated by Buildroot as an
> @@ -13,10 +29,26 @@ config BR2_TARGET_ROOTFS_INITRAMFS
> is used, regardless of how buildroot's cpio archive is
> configured.
>
> - Note that enabling initramfs together with another filesystem
> + Note that enabling this option together with another filesystem
> formats doesn't make sense: you would end up having two
> identical root filesystems, one embedded inside the kernel
> image, and one separately.
> +config BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM
> + bool "custom initramfs contents"
> + depends on BR2_TARGET_ROOTFS_INITRAMFS
> + help
> + Use the contents of BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM_CONTENTS
> + as the linux kernel configuration variable CONFIG_INITRAMFS_SOURCE
> +
> +endchoice
> +
> +config BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM_CONTENTS
> + string "custom initramfs contents"
> + depends on BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM
> + help
> + Custom value to use as CONFIG_INITRAMFS_SOURCE linux kernel configuration
> + variable. See Documentation/filesystems/ramfs-rootfs-initramfs.txt in the
> + linux kernel sources for details.
>
> comment "initramfs needs a Linux kernel to be built"
> depends on !BR2_LINUX_KERNEL
> diff --git a/fs/initramfs/initramfs.mk b/fs/initramfs/initramfs.mk
> index c751093214..ef3fdc6d3d 100644
> --- a/fs/initramfs/initramfs.mk
> +++ b/fs/initramfs/initramfs.mk
> @@ -4,6 +4,12 @@
> #
> ################################################################################
>
> +ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS_ROOTFS),y)
> +ROOTFS_INITRAMFS_DEPENDENCIES += rootfs-cpio
> +endif
> +
> +ROOTFS_INITRAMFS_DEPENDENCIES += $(BINARIES_DIR)/initramfs.cpio
> +
> # The generic fs infrastructure isn't very useful here.
> #
> # The initramfs image does not actually build an image; its only purpose is:
> @@ -19,13 +25,23 @@
> # advertise that our dependency is on the rootfs-cpio rule, which is
> # cleaner in the dependency graph.
>
> -rootfs-initramfs: linux-rebuild-with-initramfs
> +rootfs-initramfs: $(ROOTFS_INITRAMFS_DEPENDENCIES) linux-rebuild-with-initramfs
>
> rootfs-initramfs-show-depends:
> @echo rootfs-cpio
>
> .PHONY: rootfs-initramfs rootfs-initramfs-show-depends
>
> +ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS_ROOTFS),y)
> +$(BINARIES_DIR)/initramfs.cpio: rootfs-cpio
> + ln -sf rootfs.cpio $(BINARIES_DIR)/initramfs.cpio
> +endif
> +
> +ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM),y)
> +$(BINARIES_DIR)/initramfs.cpio: target-finalize $(call qstrip,$(BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM_CONTENTS))
> + $(LINUX_DIR)/usr/gen_init_cpio $(BR2_TARGET_ROOTFS_INITRAMFS_CUSTOM_CONTENTS) > $(BINARIES_DIR)/initramfs.cpio
> +endif
> +
> ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
> TARGETS_ROOTFS += rootfs-initramfs
> endif
> diff --git a/linux/linux.mk b/linux/linux.mk
> index 675e7906a8..5f4ddbb316 100644
> --- a/linux/linux.mk
> +++ b/linux/linux.mk
> @@ -300,8 +300,8 @@ define LINUX_KCONFIG_FIXUP_CMDS
> # replaced later by the real cpio archive, and the kernel will be
> # rebuilt using the linux-rebuild-with-initramfs target.
> $(if $(BR2_TARGET_ROOTFS_INITRAMFS),
> - touch $(BINARIES_DIR)/rootfs.cpio
> - $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,"$${BR_BINARIES_DIR}/rootfs.cpio",$(@D)/.config)
> + touch $(BINARIES_DIR)/initramfs.cpio
> + $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,"$${BR_BINARIES_DIR}/initramfs.cpio",$(@D)/.config)
> $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_UID,0,$(@D)/.config)
> $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_GID,0,$(@D)/.config))
> $(if $(BR2_ROOTFS_DEVICE_CREATION_STATIC),,
> @@ -528,11 +528,11 @@ endif # BR_BUILDING
> $(eval $(kconfig-package))
>
> # Support for rebuilding the kernel after the cpio archive has
> -# been generated.
> +# been generated in $(BINARIES_DIR)/initramfs.cpio.
> .PHONY: linux-rebuild-with-initramfs
> linux-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_target_installed
> linux-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_images_installed
> -linux-rebuild-with-initramfs: rootfs-cpio
> +linux-rebuild-with-initramfs: $(BINARIES_DIR)/initramfs.cpio
> linux-rebuild-with-initramfs:
> @$(call MESSAGE,"Rebuilding kernel with initramfs")
> # Build the kernel.
> --
> 2.18.0
>
>
> _______________________________________________
> 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 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
prev parent reply other threads:[~2019-08-01 8:50 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-25 19:51 [Buildroot] [PATCH v2] Add support for custom initramfs contents Richard Kunze
2019-08-01 8:50 ` Yann E. MORIN [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190801085052.GA3447@scaer \
--to=yann.morin.1998@free.fr \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox