Create menu entry to select device creation method
authorYegor Yefremov <yegor_sub1@visionsystems.de>
Thu, 30 Sep 2010 12:57:53 +0000 (14:57 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Mon, 9 May 2011 12:20:03 +0000 (14:20 +0200)
Four methods for the creation of device files in /dev are now
proposed:

 - static method uses device table as before
 - devtmpfs method enables this feature in kernel
 - mdev method adds mdev starting script to the file system
    and selects mdev itself for installation
 - udev method selects udev for installation

All dynamic methods are based on devtmpfs, so one doesn't need to care
about /dev folder.

Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
fs/Config.in
linux/linux.mk
package/busybox/S10mdev [new file with mode: 0644]
package/busybox/busybox.mk

index 188e8155be865fd42d21404934cb2d1193aa2183..9ac3accd82a18d1e80b72552f4162148415d58d2 100644 (file)
@@ -15,13 +15,34 @@ config BR2_ROOTFS_POST_BUILD_SCRIPT
          only argument. Make sure the exit code of that script is 0,
          otherwise make will stop after calling it.
 
+choice
+       prompt "/dev management"
+       default BR2_ROOTFS_DEVICE_CREATION_STATIC
+
+config BR2_ROOTFS_DEVICE_CREATION_STATIC
+       bool "Static using device table"
+
+config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS
+       bool "Dynamic using devtmpfs only"
+
+config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV
+       bool "Dynamic using mdev"
+       select BR2_PACKAGE_BUSYBOX
+
+config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV
+       bool "Dynamic using udev"
+       select BR2_PACKAGE_UDEV
+
+endchoice
+
 config BR2_ROOTFS_DEVICE_TABLE
-       string "Path to the device table"
-       default "target/generic/device_table.txt"
-       help
-         Specify the location of a device table, that will be passed
-         to the makedevs utility to create all the special device
-         files in the target filesystem.
+       string "Path to the device table"
+       depends on BR2_ROOTFS_DEVICE_CREATION_STATIC
+       default "target/generic/device_table.txt"
+       help
+         Specify the location of a device table, that will be passed
+         to the makedevs utility to create all the special device
+         files in the target filesystem.
 
 choice
        prompt "Root FS skeleton"
index 90dc1dcb981135fae12de08d2221377b9f99322e..43ca87b9f7e88cf8b7d1d4d9964b2d08dd662019 100644 (file)
@@ -133,6 +133,13 @@ ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
        $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_GID,0,$(@D)/.config)
        $(call KCONFIG_DISABLE_OPT,CONFIG_INITRAMFS_COMPRESSION_NONE,$(@D)/.config)
        $(call KCONFIG_ENABLE_OPT,CONFIG_INITRAMFS_COMPRESSION_GZIP,$(@D)/.config)
+endif
+ifneq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
+       $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS,$(@D)/.config)
+       $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS_MOUNT,$(@D)/.config)
+endif
+ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),y)
+       $(call KCONFIG_SET_OPT,CONFIG_UEVENT_HELPER_PATH,\"/sbin/mdev\",$(@D)/.config)
 endif
        $(TARGET_MAKE_ENV) $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) oldconfig
        $(Q)touch $@
diff --git a/package/busybox/S10mdev b/package/busybox/S10mdev
new file mode 100644 (file)
index 0000000..d2643d0
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Start mdev....
+#
+
+case "$1" in
+  start)
+       echo "Starting mdev..."
+       /sbin/mdev -s
+       ;;
+  stop)
+       ;;
+  restart|reload)
+       ;;
+  *)
+       echo $"Usage: $0 {start|stop|restart}"
+       exit 1
+esac
+
+exit $?
index ffd66679eab7294e65633733bc5d1f71e20d4d9d..711d11b0f77b08b97ce06c918fef5f4f5b2c6a76 100644 (file)
@@ -28,6 +28,19 @@ ifndef BUSYBOX_CONFIG_FILE
        BUSYBOX_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG))
 endif
 
+# If mdev will be used for device creation enable it and copy S10mdev to /etc/init.d
+ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),y)
+define BUSYBOX_INSTALL_MDEV_SCRIPT
+       install -m 0755 package/busybox/S10mdev $(TARGET_DIR)/etc/init.d
+endef
+define BUSYBOX_SET_MDEV
+       $(call KCONFIG_ENABLE_OPT,CONFIG_MDEV,$(BUSYBOX_BUILD_CONFIG))
+       $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_CONF,$(BUSYBOX_BUILD_CONFIG))
+       $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_EXEC,$(BUSYBOX_BUILD_CONFIG))
+       $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_LOAD_FIRMWARE,$(BUSYBOX_BUILD_CONFIG))
+endef
+endif
+
 # If we have external syslogd, force busybox to use it
 ifeq ($(BR2_PACKAGE_SYSKLOGD),y)
 define BUSYBOX_SET_SYSKLOGD
@@ -122,6 +135,7 @@ define BUSYBOX_CONFIGURE_CMDS
        $(BUSYBOX_SET_IPV6)
        $(BUSYBOX_SET_RPC)
        $(BUSYBOX_PREFER_STATIC)
+       $(BUSYBOX_SET_MDEV)
        $(BUSYBOX_NETKITBASE)
        $(BUSYBOX_NETKITTELNET)
        @yes "" | $(MAKE) ARCH=$(KERNEL_ARCH) CROSS_COMPILE="$(TARGET_CROSS)" \
@@ -138,6 +152,7 @@ define BUSYBOX_INSTALL_TARGET_CMDS
                $(INSTALL) -m 0755 -D package/busybox/udhcpc.script \
                        $(TARGET_DIR)/usr/share/udhcpc/default.script; \
        fi
+       $(BUSYBOX_INSTALL_MDEV_SCRIPT)
 endef
 
 define BUSYBOX_UNINSTALL_TARGET_CMDS