Files
poky/openembedded/packages/udev/files/init
Richard Purdie 4b46c1f6e8 Initial population
git-svn-id: https://svn.o-hand.com/repos/poky@1 311d38ba-8fff-0310-9ca6-ca027cbcb966
2005-08-31 10:45:47 +00:00

4.0 KiB
Executable File

#!/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 -m 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