#! /bin/sh # # udev init script to setup /udev # # chkconfig: 2345 20 80 # description: manage user-space device nodes in /udev . /etc/rc.d/init.d/functions . /etc/udev/udev.conf prog=udev sysfs_dir=/sys bin=/sbin/udev udevd=/sbin/udevd udev_root=/udev run_udev () { # handle block devices and their partitions for i in ${sysfs_dir}/block/*; do # add each drive export DEVPATH=${i#${sysfs_dir}} $bin block & # add each partition, on each device for j in $i/*; do if [ -f $j/dev ]; then export DEVPATH=${j#${sysfs_dir}} $bin block & fi done done # all other device classes for i in ${sysfs_dir}/class/*; do for j in $i/*; do if [ -f $j/dev ]; then export DEVPATH=${j#${sysfs_dir}} CLASS=`echo ${i#${sysfs_dir}} | \ cut --delimiter='/' --fields=3-` $bin $CLASS & fi done done return 0 } make_extra_nodes () { # there are a few things that sysfs does not export for us. # these things go here (and remember to remove them in # remove_extra_nodes() # # Thanks to Gentoo for the initial list of these. ln -snf /proc/self/fd $udev_root/fd ln -snf /proc/self/fd/0 $udev_root/stdin ln -snf /proc/self/fd/1 $udev_root/stdout ln -snf /proc/self/fd/2 $udev_root/stderr ln -snf /proc/kcore $udev_root/core #ln -snf /proc/asound/oss/sndstat $udev_root/sndstat } remove_extra_nodes () { # get rid of the extra nodes created in make_extra_nodes() rm $udev_root/fd rm $udev_root/stdin rm $udev_root/stdout rm $udev_root/stderr rm $udev_root/core #rm $udev_root/sndstat } case "$1" in start) # don't use udev if sysfs is not mounted. if [ ! -d $sysfs_dir/block ]; then exit 1 fi if [ ! -d $udev_root ]; then mkdir $udev_root fi # remove the database if it is there as we always want to start fresh if [ -f $udev_root/.udevdb ]; then rm -rf $udev_root/.udevdb fi # propogate /udev from /sys - we only need this while we do not # have initramfs and an early user-space with which to do early # device bring up export ACTION=add echo -n $"Creating initial udev device nodes:" run_udev make_extra_nodes # We want to start udevd ourselves if it isn't already running. This # lets udevd run at a sane nice level... $udevd & success /bin/true echo touch /var/lock/subsys/udev ;; stop) # be careful echo -n $"Removing udev device nodes: " export ACTION=remove run_udev remove_extra_nodes success /bin/true echo rm -f /var/lock/subsys/udev ;; status) if [ -f /var/lock/subsys/udev ]; then echo $"$prog has run" exit 0 fi echo $"$prog is stopped" exit 3 ;; restart) $0 stop $0 start ;; reload) # nothing to do here ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 esac exit 0