diff --git a/fs/cpio/Config.in b/fs/cpio/Config.in index bec2d9dca2..4d38276c88 100644 --- a/fs/cpio/Config.in +++ b/fs/cpio/Config.in @@ -29,6 +29,11 @@ endchoice if BR2_TARGET_ROOTFS_CPIO_DRACUT +config BR2_TARGET_ROOTFS_CPIO_DRACUT_MODULES + string "extra dracut modules" + help + Space-separated list of directories containing dracut modules. + config BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES string "dracut configuration files" default "fs/cpio/dracut.conf" diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk index 061f4a18f1..00ab6a8f82 100644 --- a/fs/cpio/cpio.mk +++ b/fs/cpio/cpio.mk @@ -50,6 +50,13 @@ else ifeq ($(BR2_TARGET_ROOTFS_CPIO_DRACUT),y) ROOTFS_CPIO_DEPENDENCIES += host-dracut +ROOTFS_CPIO_DRACUT_MODULES = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_MODULES)) +ifeq ($(BR_BUILDING),y) +ifneq ($(words $(ROOTFS_CPIO_DRACUT_MODULES)),$(words $(sort $(notdir $(ROOTFS_CPIO_DRACUT_MODULES))))) +$(error No two dracut modules can have the same basename, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_MODULES setting) +endif +endif + ROOTFS_CPIO_DRACUT_CONF_FILES = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES)) ifeq ($(BR_BUILDING),y) ifeq ($(ROOTFS_CPIO_DRACUT_CONF_FILES),) @@ -68,11 +75,14 @@ ROOTFS_CPIO_OPTS += --no-kernel endif define ROOTFS_CPIO_CMD - mkdir -p $(ROOTFS_CPIO_DIR)/tmp $(ROOTFS_CPIO_DIR)/confdir + mkdir -p $(ROOTFS_CPIO_DIR)/tmp $(ROOTFS_CPIO_DIR)/confdir $(HOST_DIR)/lib/dracut/modules.d touch $(ROOTFS_CPIO_DIR)/empty-config $(foreach cfg,$(ROOTFS_CPIO_DRACUT_CONF_FILES), \ cp $(cfg) $(ROOTFS_CPIO_DIR)/confdir/$(notdir $(cfg)) ) + $(foreach m,$(ROOTFS_CPIO_DRACUT_MODULES), \ + cp -a $(m)/* $(HOST_DIR)/lib/dracut/modules.d/ + ) $(HOST_DIR)/bin/dracut \ $(ROOTFS_CPIO_OPTS) \ -c $(ROOTFS_CPIO_DIR)/empty-config \