summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/init.d/udev.init.lfs100
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