-#! /bin/bash
+#! /bin/sh
#
-# random init script to setup /udev
+# udev init script to setup /udev
#
# chkconfig: 2345 20 80
# description: manage user-space device nodes in /udev
. /etc/rc.d/init.d/functions
-udev_dir=/udev
+. /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
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)
- if [ ! -d $udev_dir ]; then
- mkdir $udev_dir
- fi
- if [ ! -d $sysfs_dir ]; then
+ # 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
- action "Creating initial udev device nodes: " /bin/true
export ACTION=add
- run_udev
+ 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
- action "Removing udev device nodes: " /bin/true
+ 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 [ -d $udev_dir ]; then
- echo "the udev device node directory exists"
- else
- echo "the udev device node directory does not exist"
+ if [ -f /var/lock/subsys/udev ]; then
+ echo $"$prog has run"
+ exit 0
fi
+ echo $"$prog is stopped"
+ exit 3
;;
restart)
$0 stop