Systemd/extras/start_udev
kay.sievers@vrfy.org 7a947ce515 [PATCH] big cleanup of internal udev api
Here is the first patch to cleanup the internal processing of the
various stages of an udev event. It should not change any behavior,
but if your system depends on udev, please always test it before reboot :)

We pass only one generic structure around between add, remove,
namedev, db and dev_d handling and make all relevant data available
to all internal stages. All udev structures are renamed to "udev".

We replace the fake parameter by a flag in the udev structure.

We open the class device in the main binaries and not in udev_add, to
make it possible to use libsysfs for udevstart directory crawling.

The last sleep parameters are removed.
2005-04-26 22:02:46 -07:00

103 lines
2.2 KiB
Bash

#! /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
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 "udev startup is finished!"
exit 0