summaryrefslogtreecommitdiff
path: root/packages/udev/udev-042/init
diff options
context:
space:
mode:
Diffstat (limited to 'packages/udev/udev-042/init')
-rw-r--r--packages/udev/udev-042/init178
1 files changed, 178 insertions, 0 deletions
diff --git a/packages/udev/udev-042/init b/packages/udev/udev-042/init
index e69de29bb2..266628e971 100644
--- a/packages/udev/udev-042/init
+++ b/packages/udev/udev-042/init
@@ -0,0 +1,178 @@
+#!/bin/sh -e
+
+PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+UDEVSTART=/sbin/udevstart
+
+# default maximum size of the /dev ramfs
+ramfs_size="1M"
+
+[ -x $UDEVSTART ] || exit 0
+
+. /etc/udev/udev.conf
+
+case "$(uname -r)" in
+ 2.[012345].*)
+ echo "udev requires a kernel >= 2.6, not started."
+ exit 0
+ ;;
+esac
+
+if ! grep -q '[[:space:]]ramfs$' /proc/filesystems; then
+ echo "udev requires ramfs support, not started."
+ exit 0
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "udev requires hotplug support, not started."
+ exit 0
+fi
+
+##############################################################################
+
+# we need to unmount /dev/pts/ and remount it later over the ramfs
+unmount_devpts() {
+ if mountpoint -q /dev/pts/; then
+ umount -l /dev/pts/
+ fi
+
+ if mountpoint -q /dev/shm/; then
+ umount -l /dev/shm/
+ fi
+}
+
+# mount a ramfs over /dev, if somebody did not already do it
+mount_ramfs() {
+ if grep -E -q "^[^[:space:]]+ /dev ramfs" /proc/mounts; then
+ return 0
+ fi
+
+ # /.dev is used by /sbin/MAKEDEV to access the real /dev directory.
+ # if you don't like this, remove /.dev/.
+ [ -d /.dev ] && mount --bind /dev /.dev
+
+ echo -n "Mounting a ramfs over /dev..."
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none /dev
+ echo "done."
+}
+
+# I hate this hack. -- Md
+make_extra_nodes() {
+ if [ -f /etc/udev/links.conf ]; then
+ grep '^[^#]' /etc/udev/links.conf | \
+ while read type name arg1; do
+ [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
+ case "$type" in
+ L)
+ ln -s $arg1 /dev/$name
+ ;;
+ D)
+ mkdir -p /dev/$name
+ ;;
+ M)
+ mknod --mode=600 /dev/$name $arg1
+ ;;
+ *)
+ echo "unparseable line ($type $name $arg1)"
+ ;;
+ esac
+ done
+ fi
+}
+
+##############################################################################
+
+if [ "$udev_root" != "/dev/" ]; then
+ echo "WARNING: udev_root != /dev/"
+
+case "$1" in
+ start)
+ if [ -e "$udev_root/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none $udev_root
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ echo "done."
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Unmounting $udev_root..."
+ # unmounting with -l should never fail
+ if umount -l $udev_root; then
+ echo "done."
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+ exit 0
+fi # udev_root != /dev/
+
+##############################################################################
+# When modifying this script, do not forget that between the time that
+# the new /dev has been mounted and udevstart 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.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ unmount_devpts
+ mount_ramfs
+ ACTION=add
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+# /etc/init.d/mountvirtfs start
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ unmount_devpts
+ echo -n "Unmounting /dev..."
+ # unmounting with -l should never fail
+ if umount -l /dev; then
+ echo "done."
+ umount -l /.dev || true
+# /etc/init.d/mountvirtfs start
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Recreating device nodes..."
+ ACTION=add
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+