X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=etc%2Finit.d%2Fudev;h=437556c3fb964a8448cb2380124e36ade1c76018;hb=66a90217605c149fe06f3edf0f3c491f28e640b6;hp=99f06c296306f8fee99929b7856a82446ab2b218;hpb=8b94dcd0671b038754af7683eccea5b32ccb955d;p=elogind.git diff --git a/etc/init.d/udev b/etc/init.d/udev index 99f06c296..437556c3f 100644 --- a/etc/init.d/udev +++ b/etc/init.d/udev @@ -7,61 +7,83 @@ . /etc/rc.d/init.d/functions -udev_dir=/udev +. /etc/udev/udev.conf + sysfs_dir=/sys bin=/sbin/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 +} + + case "$1" in start) - if [ ! -d $udev_dir ]; then - mkdir $udev_dir - fi if [ ! -d $sysfs_dir ]; 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 -f $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 - # add tty devices - for i in ${sysfs_dir}/class/tty/*; do - export DEVPATH="/"`echo $i | cut --delimiter='/' --fields=3-` - $bin tty - done - # add block devices and their partitions - for i in ${sysfs_dir}/block/*; do - export DEVPATH="/"`echo $i | cut --delimiter='/' --fields=3-` - $bin block - for j in $i/*; do - if [ -f $j/dev ]; then - export DEVPATH="/"`echo $j | \ - cut --delimiter='/' --fields=3-` - $bin block - fi - done - done - # TODO: add other device classes + run_udev ;; stop) # be careful - if [ $udev_dir -a "$udev_dir" != "/" ]; then - # clear out /udev - rm -rf ${udev_dir}/* - fi + action "Removing udev device nodes: " /bin/true + export ACTION=remove + run_udev ;; status) - if [ -d $udev_dir ]; then + if [ -d $udev_root ]; then echo "the udev device node directory exists" else echo "the udev device node directory does not exist" fi ;; - restart|reload) + restart) + $0 stop + $0 start + ;; + reload) # nothing to do here ;; *) - echo "Usage: $0 {start|stop|status}" + echo "Usage: $0 {start|stop|status|restart}" exit 1 esac