diff options
author | Chia-I Wu <olv@openmoko.com> | 2008-11-18 16:38:29 +0800 |
---|---|---|
committer | John Lee <john_lee@openmoko.org> | 2009-01-12 14:29:20 +0800 |
commit | 5c46f644fd99750ec623ccf67465f045833ec38c (patch) | |
tree | 0b2cce755fe0d74183b3f3342c9b669944d98160 /packages/udev/udev-118/openmoko | |
parent | f76398162e4e511902cce1a41807db3cbb9a37b1 (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/init | 177 |
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 + |