diff options
Diffstat (limited to 'packages/udev/udev-042/init')
-rw-r--r-- | packages/udev/udev-042/init | 178 |
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 + |