diff options
Diffstat (limited to 'etc/init.d')
-rw-r--r-- | etc/init.d/udev.init.lfs | 100 |
1 files changed, 46 insertions, 54 deletions
diff --git a/etc/init.d/udev.init.lfs b/etc/init.d/udev.init.lfs index 08c81733e1..c738369081 100644 --- a/etc/init.d/udev.init.lfs +++ b/etc/init.d/udev.init.lfs @@ -2,83 +2,75 @@ # # LinuxFromScratch udev init script # derived from original RedHat udev init script -# 2003 by Michael Buesch <mbuesch@freenet.de> +# 2003, 2004 by Michael Buesch <mbuesch@freenet.de> # source /etc/sysconfig/rc source $rc_functions +source /etc/udev/udev.conf -udev_dir="/udev" 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 + return 0 +} + case "$1" in start) echo "Creating initial udev device nodes ..." - if [ ! -d $udev_dir ]; then - mkdir $udev_dir - if [ $? -ne 0 ]; then - print_status failure - exit 1 - fi - fi if [ ! -d $sysfs_dir ]; then echo "sysfs_dir $sysfs_dir does not exist!" print_status failure exit 1 fi + if [ ! -d $udev_root ]; then + mkdir $udev_root + if [ $? -ne 0 ]; then + print_status failure + exit 1 + fi + 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 - clean_exit="yes" export ACTION=add - # add 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 - if [ $? -ne 0 ]; then - echo "Warning: $DEVPATH failed." - clean_exit="no" - fi - 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 - if [ $? -ne 0 ]; then - echo "Warning: $DEVPATH failed." - clean_exit="no" - fi - fi - done - done - if [ $clean_exit = "yes" ]; then - print_status success - else - print_status warning - fi + run_udev + evaluate_retval ;; stop) echo "Removing udev device nodes ..." - # be careful - if [ $udev_dir -a "$udev_dir" != "/" ]; then - # clear out /udev - rm -rf ${udev_dir}/* - evaluate_retval - fi + export ACTION=remove + run_udev + evaluate_retval ;; reload) # nothing to do here |