summaryrefslogtreecommitdiffstats
path: root/generic/etc/init.d/udev
diff options
context:
space:
mode:
Diffstat (limited to 'generic/etc/init.d/udev')
-rw-r--r--generic/etc/init.d/udev112
1 files changed, 112 insertions, 0 deletions
diff --git a/generic/etc/init.d/udev b/generic/etc/init.d/udev
new file mode 100644
index 000000000..cdce003a3
--- /dev/null
+++ b/generic/etc/init.d/udev
@@ -0,0 +1,112 @@
+#! /bin/sh
+#
+# start_udev
+#
+# script to initialize /dev by using udev.
+#
+# Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+#
+# Released under the GPL v2 only.
+#
+# This needs to be run at the earliest possible point in the boot
+# process.
+#
+# Based on the udev init.d script
+#
+# Thanks go out to the Gentoo developers for proving
+# that this is possible to do.
+#
+# Yes, it's very verbose, feel free to turn off all of the echo calls,
+# they were there to make me feel better that everything was working
+# properly during development...
+#
+
+. /etc/udev/udev.conf
+
+prog=udev
+sysfs_dir=/sys
+bin=/sbin/udev
+udevd=/sbin/udevd
+
+run_udev () {
+ export ACTION=add
+
+ # handle block devices and their partitions
+ for i in ${sysfs_dir}/block/*; do
+ # add each drive
+ export DEVPATH=${i#${sysfs_dir}}
+ echo "$DEVPATH"
+ $bin block
+
+ # add each partition, on each device
+ for j in $i/*; do
+ if [ -f $j/dev ]; then
+ export DEVPATH=${j#${sysfs_dir}}
+ echo "$DEVPATH"
+ $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-`
+ echo "$DEVPATH"
+ $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
+
+ mkdir $udev_root/pts
+ mkdir $udev_root/shm
+}
+
+# don't use udev if sysfs is not mounted.
+if [ ! -d $sysfs_dir/block ]; then
+ echo "error: sysfs not mounted"
+ exit 1
+fi
+
+echo "mounting... ramfs at $udev_root"
+mount -n -t ramfs none $udev_root
+
+# propogate /udev from /sys
+echo "creating initial udev device nodes:"
+
+# You can use the shell scripts above by calling run_udev or execute udevstart
+# which does the same thing, but much faster by not using shell.
+# only comment out one of the following lines.
+#run_udev
+/sbin/udevstart
+
+echo "making extra nodes"
+make_extra_nodes
+
+echo /sbin/udevsend > /proc/sys/kernel/hotplug
+
+if [ -f "$udevd" ]; then
+ $udevd &
+fi
+
+# We can only mount /dev/pts after initialising udev
+mount /dev/pts
+
+echo "udev startup is finished"
+exit 0