[PATCH] fastboot: udev: Update init script to support udev-static-devices.

Chia-I Wu olv at openmoko.com
Tue Nov 18 09:38:29 CET 2008


---
 packages/udev/files/links.conf       |    3 +
 packages/udev/udev-118/openmoko/init |  170 ++++++++++++++++++++++++++++++++++
 packages/udev/udev_118.bb            |    2 +-
 3 files changed, 174 insertions(+), 1 deletions(-)
 create mode 100644 packages/udev/udev-118/openmoko/init

diff --git a/packages/udev/files/links.conf b/packages/udev/files/links.conf
index 8fff922..a9f8b58 100644
--- a/packages/udev/files/links.conf
+++ b/packages/udev/files/links.conf
@@ -12,6 +12,9 @@ L MAKEDEV	/sbin/MAKEDEV
 D pts
 D shm
 
+M null         c   1 3
+M console      c   5 1
+
 # Hic sunt leones.
 M ppp		c 108 0
 D loop
diff --git a/packages/udev/udev-118/openmoko/init b/packages/udev/udev-118/openmoko/init
new file mode 100644
index 0000000..d558e4b
--- /dev/null
+++ b/packages/udev/udev-118/openmoko/init
@@ -0,0 +1,170 @@
+#!/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
+
+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() {
+  if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then
+    cp -a /lib/udev/devices/* /$1/
+  elif [ -f "/lib/udev/devices.tar.gz" ]; then
+    tar -C /lib/udev -zxf "/lib/udev/devices.tar.gz"
+    cp -a /lib/udev/devices/* /$1/
+  fi
+
+  [ -e /etc/udev/links.conf ] || return 0
+
+  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
+}
+
+##############################################################################
+
+[ -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
+    make_extra_nodes "$udev_root"
+
+    # 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" -o ! -f "/lib/udev/devices.tar.gz" ]; 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
+
diff --git a/packages/udev/udev_118.bb b/packages/udev/udev_118.bb
index 20fef83..5cfff28 100644
--- a/packages/udev/udev_118.bb
+++ b/packages/udev/udev_118.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
 the hotplug package and requires a kernel not older than 2.6.12."
 RPROVIDES_${PN} = "hotplug"
 
-PR = "r3"
+PR = "r3.1"
 
 DEFAULT_PREFERENCE = "-118"
 
-- 
1.5.6.5


--zYM0uCDKw75PZbzx
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: inline; filename="0007-fastboot-alsa-state-Run-init-script-earlier-and-in.patch"



More information about the devel mailing list