[Buildroot] [RFC] fs: allow passing the image file name to inner-rootfs

Carlos Santos casantos at datacom.com.br
Fri Jun 22 02:31:05 UTC 2018


Suppose that you want to create a filesystem image containing only the
/var/lib subtree. That would something like this on a br2-external:

fs/rootfs-var-lib/Config.in:

    menuconfig BR2_TARGET_ROOTFS_VAR_LIB
    bool "/var/lib"

    if BR2_TARGET_ROOTFS_VAR_LIB
    source "$BR2_EXTERNAL_MFS_PATH/fs/rootfs-var-lib/ext4/Config.in"
    endif

fs/rootfs-var-lib/rootfs-var-lib.mk:
    ifeq ($(BR2_TARGET_ROOTFS_VAR_LIB),y)
    rootfs-var-lib = $(call inner-rootfs,var-lib-$(pkgname),VAR_LIB_$(call UPPERCASE,$(pkgname)))
    include $(sort $(wildcard $(BR2_EXTERNAL_MFS_PATH)/fs/rootfs-var-lib/*/*.mk))
    endif

fs/rootfs-var-lib/ext4/Config.in:
    config BR2_TARGET_ROOTFS_VAR_LIB_EXT4
        bool "ext4 /var/lib filesystem"
        select BR2_PACKAGE_HOST_E2FSPROGS
        help
          Build an ext4 /var/lib filesystem

    if BR2_TARGET_ROOTFS_VAR_LIB_EXT4
        [...]
    endif # BR2_TARGET_ROOTFS_VAR_LIB_EXT4

fs/rootfs-var-lib/ext4/ext4.mk:
    # Build the ext4 /var/lib filesystem image
    [...]
    ROOTFS_VAR_LIB_EXT4_OPTS = \
        -d $(TARGET_DIR)/var/lib \
                        ^^^^^^^^---- /var/lib, only
    [...]
    define ROOTFS_VAR_LIB_EXT4_CMD
        rm -f $@
        $(HOST_DIR)/sbin/mkfs.ext4 $(ROOTFS_VAR_LIB_EXT4_OPTS) $@ "$(ROOTFS_VAR_LIB_EXT4_SIZE)"
    endef
    $(eval $(rootfs-var-lib))

Selecting BR2_TARGET_ROOTFS_VAR_LIB_EXT4 would produce the filesystem
image $(BINARIES_DIR)/rootfs.var-lib-ext4 coresponging to the contents
of $(TARGET_DIR)/var/lib. This is correct but the file name is a bit
awkward. It would be better to call it "rootfs-var-lib.ext4", instead.

This can be achieved by passing a third argument to inner-rootfs with
the desired file name:

    rootfs-var-lib = $(call inner-rootfs,var-lib-$(pkgname),VAR_LIB_$(call UPPERCASE,$(pkgname)),rootfs-var-lib.$(pkgname))

Signed-off-by: Carlos Santos <casantos at datacom.com.br>
---
 fs/common.mk | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/common.mk b/fs/common.mk
index abf35418cb..2380c1dd3f 100644
--- a/fs/common.mk
+++ b/fs/common.mk
@@ -139,10 +139,10 @@ ROOTFS_$(2)_COMPRESS_EXT = .xz
 ROOTFS_$(2)_COMPRESS_CMD = xz -9 -C crc32 -c
 endif
 
-$$(BINARIES_DIR)/rootfs.$(1): ROOTFS=$(2)
-$$(BINARIES_DIR)/rootfs.$(1): FAKEROOT_SCRIPT=$$(ROOTFS_$(2)_DIR)/fakeroot
-$$(BINARIES_DIR)/rootfs.$(1): $$(ROOTFS_$(2)_DEPENDENCIES)
-	@$$(call MESSAGE,"Generating root filesystem image rootfs.$(1)")
+$$(BINARIES_DIR)/$(3): ROOTFS=$(2)
+$$(BINARIES_DIR)/$(3): FAKEROOT_SCRIPT=$$(ROOTFS_$(2)_DIR)/fakeroot
+$$(BINARIES_DIR)/$(3): $$(ROOTFS_$(2)_DEPENDENCIES)
+	@$$(call MESSAGE,"Generating root filesystem image $(3)")
 	rm -rf $$(ROOTFS_$(2)_DIR)
 	mkdir -p $$(ROOTFS_$(2)_DIR)
 	echo '#!/bin/sh' > $$(FAKEROOT_SCRIPT)
@@ -163,7 +163,7 @@ endif
 rootfs-$(1)-show-depends:
 	@echo $$(ROOTFS_$(2)_DEPENDENCIES)
 
-rootfs-$(1): $$(BINARIES_DIR)/rootfs.$(1)
+rootfs-$(1): $$(BINARIES_DIR)/$(3)
 
 .PHONY: rootfs-$(1) rootfs-$(1)-show-depends
 
@@ -181,6 +181,6 @@ endif
 endef
 
 # $(pkgname) also works well to return the filesystem name
-rootfs = $(call inner-rootfs,$(pkgname),$(call UPPERCASE,$(pkgname)))
+rootfs = $(call inner-rootfs,$(pkgname),$(call UPPERCASE,$(pkgname)),rootfs.$(pkgname))
 
 include $(sort $(wildcard fs/*/*.mk))
-- 
2.17.1



More information about the buildroot mailing list