#!/bin/sh
#
# udev	This is a minimal non-LSB version of a UDEV startup script.  It
#	was derived by stripping down the udev-058 LSB version for use
#	with buildroot on embedded hardware using Linux 2.6.12+ kernels.
#
#	You may need to customize this for your system's resource limits
#	(including startup time!) and administration.  For example, if
#	your early userspace has a custom initramfs or initrd you might
#	need /dev much earlier; or without hotpluggable busses (like USB,
#	PCMCIA, MMC/SD, and so on) your /dev might be static after boot.
#
#	This script assumes your system boots right into the eventual root
#	filesystem, and that init runs this udev script before any programs
#	needing more device nodes than the bare-bones set -- /dev/console,
#	/dev/zero, /dev/null -- that's needed to boot and run this script.
#

# old kernels don't use udev
case $(uname -r) in
    2.6*|2.7*)	;;
    *)		exit 0;;
esac

# Check for missing binaries
UDEV_BIN=/sbin/udevd
test -x $UDEV_BIN || exit 5
UDEVSTART_BIN=/sbin/udevstart
test -x $UDEVSTART_BIN || exit 5

# Check for config file and read it
UDEV_CONFIG=/etc/udev/udev.conf
test -r $UDEV_CONFIG || exit 6
. $UDEV_CONFIG

# Directory where sysfs is mounted
SYSFS_DIR=/sys

case "$1" in
    start)
        # mount sysfs if it's not yet mounted
        if [ ! -d $SYSFS_DIR ]; then
	    echo "${0}: SYSFS_DIR \"$SYSFS_DIR\" not found"
	    exit 1
        fi
        grep -q "^sysfs $SYSFS_DIR" /proc/mounts ||
	mount -t sysfs /sys /sys ||
	exit 1

        # mount $udev_root as ramfs if it's not yet mounted
        # we know 2.6 kernels always support ramfs
        if [ ! -d $udev_root ]; then
	    echo "${0}: udev_root \"$udev_root\" not found"
	    exit 1
        fi
        grep -q "^udev $udev_root" /proc/mounts ||
	mount -t ramfs udev $udev_root ||
	exit 1

        mkdir $udev_root/pts $udev_root/shm
        mknod -m 0666 /dev/null c 1 3
        mknod -m 0666 /dev/zero c 1 5
        mknod -m 0600 /dev/console c 5 1

        # populate /dev (normally)
        echo -n "Populating $udev_root using udev: "
        echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
        $UDEV_BIN -d || (echo "FAIL" && exit 1)
	$UDEVSTART_BIN || (echo "FAIL" && exit 1)
	mount -t devpts /dev/pts /dev/pts || (echo "FAIL" && exit 1)
        echo "done"
        ;;
    stop)
        # Stop execution of events
        udevcontrol stop_exec_queue
        killall udevd
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac


exit 0
