summaryrefslogtreecommitdiff
path: root/packages/udev/udev-118/openmoko
diff options
context:
space:
mode:
authorChia-I Wu <olv@openmoko.com>2008-11-18 16:38:29 +0800
committerJohn Lee <john_lee@openmoko.org>2009-01-12 14:29:20 +0800
commit5c46f644fd99750ec623ccf67465f045833ec38c (patch)
tree0b2cce755fe0d74183b3f3342c9b669944d98160 /packages/udev/udev-118/openmoko
parentf76398162e4e511902cce1a41807db3cbb9a37b1 (diff)
fastboot: udev: Update init script to support udev-static-devices.
Diffstat (limited to 'packages/udev/udev-118/openmoko')
-rw-r--r--packages/udev/udev-118/openmoko/init177
1 files changed, 177 insertions, 0 deletions
diff --git a/packages/udev/udev-118/openmoko/init b/packages/udev/udev-118/openmoko/init
new file mode 100644
index 0000000000..e8b2cc57f0
--- /dev/null
+++ b/packages/udev/udev-118/openmoko/init
@@ -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
+