udev-124: add boot scripts for opendreambox
authorAndreas Oberritter <obi@opendreambox.org>
Mon, 6 Jul 2009 23:07:21 +0000 (01:07 +0200)
committerAndreas Oberritter <obi@opendreambox.org>
Mon, 6 Jul 2009 23:07:21 +0000 (01:07 +0200)
recipes/udev/udev-124/opendreambox/default [new file with mode: 0644]
recipes/udev/udev-124/opendreambox/init [new file with mode: 0644]
recipes/udev/udev_124.bb

diff --git a/recipes/udev/udev-124/opendreambox/default b/recipes/udev/udev-124/opendreambox/default
new file mode 100644 (file)
index 0000000..d0050b8
--- /dev/null
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-124/opendreambox/init b/recipes/udev/udev-124/opendreambox/init
new file mode 100644 (file)
index 0000000..e8b2cc5
--- /dev/null
@@ -0,0 +1,177 @@
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides:          udev
+# Required-Start:    mountkernfs
+# Required-Stop:
+# Default-Start:     S
+# Default-Stop:
+# Short-Description: Start udevd, populate /dev and load drivers.
+### END INIT INFO
+
+# This script is based on Debian's.
+
+COLDPLUG=no
+COLDPLUG_TARBALL="/lib/udev/devices.tar.gz"
+
+for x in $(cat /proc/cmdline); do
+        case $x in
+        coldplug)
+               COLDPLUG=yes
+                ;;
+        esac
+done
+
+# we need to unmount /dev/pts/ and remount it later over the tmpfs
+unmount_devpts() {
+  if mountpoint -q /dev/pts/; then
+    umount -n -l /dev/pts/
+  fi
+
+  if mountpoint -q /dev/shm/; then
+    umount -n -l /dev/shm/
+  fi
+}
+
+# mount a tmpfs over /dev, if somebody did not already do it
+mount_tmpfs() {
+  if grep -q "/dev tmpfs" /proc/mounts; then
+    return
+  fi
+
+  if ! mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs udev /dev; then
+    echo "udev requires tmpfs support, not started."
+    exit 1
+  fi
+
+  return 0
+}
+
+create_dev_makedev() {
+  if [ -e /sbin/MAKEDEV ]; then
+    ln -sf /sbin/MAKEDEV /dev/MAKEDEV
+  else
+    ln -sf /bin/true /dev/MAKEDEV
+  fi
+}
+
+make_extra_nodes() {
+  ret=1
+  if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then
+    cp -a /lib/udev/devices/* /$1/
+    ret=0
+  fi
+
+  [ -e /etc/udev/links.conf ] || return $ret
+
+  grep '^[^#]' /etc/udev/links.conf | \
+  while read type name arg1; do
+    [ "$type" -a "$name" -a ! -e "/$1/$name" -a ! -L "/$1/$name" ] || continue
+    case "$type" in
+      L) ln -s $arg1 /$1/$name ;;
+      D) mkdir -p /$1/$name ;;
+      M) mknod -m 600 /$1/$name $arg1 ;;
+      *) echo "links.conf: unparseable line ($type $name $arg1)" >&2 ;;
+    esac
+  done
+
+  return $ret
+}
+
+##############################################################################
+
+[ -x /sbin/udevd ] || exit 0
+
+PATH="/sbin:/bin"
+
+# defaults
+tmpfs_size="2M"
+udev_root="/dev"
+
+if [ -e /etc/udev/udev.conf ]; then
+  . /etc/udev/udev.conf
+fi
+
+##############################################################################
+
+# When modifying this script, do not forget that between the time that the
+# new /dev has been mounted and udevadm trigger has been run there will be
+# no /dev/null. This also means that you cannot use the "&" shell command.
+
+case "$1" in
+    start)
+    if [ -e "$udev_root/.udev/" ]; then
+       if mountpoint -q $udev_root/; then
+           TMPFS_MOUNTED=1
+       else
+           echo ".udev/ already exists on the static $udev_root!"
+       fi
+    fi
+
+    echo > /sys/kernel/uevent_helper
+
+    if [ -z "$TMPFS_MOUNTED" ]; then
+       unmount_devpts
+       mount_tmpfs
+    else
+       # and clean up the database of the initramfs udev
+       rm -rf /dev/.udev/
+    fi
+
+    # /dev/null must be created before udevd is started
+    if ! make_extra_nodes "$udev_root"; then
+       COLDPLUG=yes
+    fi
+    if [ ! -f "$COLDPLUG_TARBALL" ]; then
+       COLDPLUG=yes
+    fi
+
+    # if this directory is not present /dev will not be updated by udev
+    mkdir -p /dev/.udev/db/
+
+    echo "Startting the hotplug events dispatcher"
+    udevd --daemon
+
+    mkdir -p /dev/.udev/queue/ /dev/.udev/rules.d/
+
+    create_dev_makedev
+
+    if [ $COLDPLUG != "no" ]; then
+        echo "Synthesizing the initial hotplug events"
+        udevadm trigger
+
+        # wait for the udevd childs to finish
+        echo "Waiting for /dev to be fully populated"
+        if udevadm settle; then
+            echo 'done'
+        else
+            echo 'timeout'
+        fi
+    fi
+
+    ;;
+
+    stop)
+    echo "Stopping the hotplug events dispatcher"
+    start-stop-daemon --stop --name udevd --quiet --oknodo
+    ;;
+
+    restart)
+    echo "Stopping the hotplug events dispatcher"
+    start-stop-daemon --stop --name udevd --quiet --oknodo
+
+    echo "Startting the hotplug events dispatcher"
+    udevd --daemon
+    ;;
+
+    reload|force-reload)
+    udevadm control --reload_rules
+    ;;
+
+    *)
+    echo "Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload}"
+    exit 1
+    ;;
+esac
+
+exit 0
+
index 834a70a..be545f7 100644 (file)
@@ -2,7 +2,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
 /dev/, handles hotplug events and loads drivers at boot time. It replaces \
 the hotplug package and requires a kernel not older than 2.6.12."
 RPROVIDES_${PN} = "hotplug"
-PR = "r17"
+PR = "r18"
 
 SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
           file://noasmlinkage.patch;patch=1 \