#!/bin/sh # # start_udev # # script to initialize /dev by using udev. # # Copyright (C) 2004 Greg Kroah-Hartman # # 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... # default value, if no config present. udev_root="/dev/" sysfs_dir="/sys" udevd_timeout=8 # don't use udev if sysfs is not mounted. [ -d $sysfs_dir/class ] || exit 1 [ -r /proc/mounts ] || exit 1 [ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf . /etc/rc.d/init.d/functions prog=udev bin=/sbin/udev udevd=/sbin/udevd make_extra_nodes () { grep '^[^#]' /etc/udev/links.conf | \ while read type name arg1; do [ "$type" -a "$name" -a ! -e "$udev_root/$name" -a ! -L "/dev/$name" ] ||continue case "$type" in L) ln -s $arg1 $udev_root/$name ;; D) mkdir -p $udev_root/$name ;; M) mknod -m 600 /dev/$name $arg1 ;; *) echo "links.conf: unparseable line ($type $name $arg1)" ;; esac done [ -d /lib/udev/devices ] && cp -a /lib/udev/devices/* /dev/ >/dev/null 2>&1 || : [ -d /lib64/udev/devices ] && cp -a /lib64/udev/devices/* /dev/ >/dev/null 2>&1 || : } kill_udevd() { if [ -x /sbin/pidof ]; then pid=`/sbin/pidof -x udevd` [ -n "$pid" ] && kill $pid fi } set_hotplug_handler() { echo "" > /proc/sys/kernel/hotplug } export ACTION=add prog=udev ret=0 show "Starting udev" busy # mount the tmpfs on ${udev_root%/}, if not already done LANG=C awk "\$2 == \"${udev_root%/}\" && \$3 == \"tmpfs\" { exit 1 }" /proc/mounts && { if LANG=C fgrep -q "none ${udev_root%/}/pts " /proc/mounts; then PTSDIR=$(mktemp -d ${TMPDIR:-/tmp}/tmpXXXXXX) mount --move $udev_root/pts "$PTSDIR" fi if LANG=C fgrep -q "none ${udev_root%/}/shm " /proc/mounts; then SHMDIR=$(mktemp -d ${TMPDIR:-/tmp}/tmpXXXXXX) mount --move $udev_root/shm "$SHMDIR" fi mount -n -o mode=0755 -t tmpfs none "$udev_root" mkdir -m 0755 $udev_root/pts mkdir -m 0755 $udev_root/shm if [ -n "$PTSDIR" ]; then mount --move "$PTSDIR" $udev_root/pts rmdir "$PTSDIR" fi if [ -n "$SHMDIR" ]; then mount --move "$SHMDIR" $udev_root/shm rmdir "$SHMDIR" fi ret=$(( $ret + $? )) } kill_udevd > "$udev_root/null" 2>&1 # Start udevd daemon udevd --daemon ret=$(( $ret + $? )) # Making extra nodes make_extra_nodes ret=$(( $ret + $? )) if [ -f "/sys/class/tty/console/uevent" ]; then # Setting default hotplug handler set_hotplug_handler ret=$(( $ret + $? )) # retrigger all events # Udev find's it's own way of making this dir # and making it by hand makes udevsettle # work forever #mkdir -p /dev/.udev/queue udevadm trigger ret=$(( $ret + $? )) # wait for the events to finish udevadm settle ret=$(( $ret + $? )) else echo "Kernel too old for this udev version" fi ret=$(( $ret + $? )) [ $ret -eq 0 ] && ok || fail exit 0