171 lines
4.0 KiB
Plaintext
171 lines
4.0 KiB
Plaintext
# Copyright 1999-2005 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
# modified for crux 12.20.2005 (jaeger)
|
|
|
|
udev_version() {
|
|
local version=0
|
|
|
|
if [[ -x /sbin/udev ]] ; then
|
|
version=$(/sbin/udev -V)
|
|
# We need it without a leading '0', else bash do the wrong thing
|
|
version=${version##0}
|
|
# Older udevs will print nothing
|
|
[[ -z ${version} ]] && version=0
|
|
fi
|
|
|
|
echo "${version}"
|
|
}
|
|
|
|
# This works for 2.6.15 kernels or greater
|
|
trigger_events() {
|
|
list=""
|
|
# if you want real coldplug (with all modules being loaded for all
|
|
# devices in the system), uncomment out the next line.
|
|
#list="$list $(echo /sys/bus/*/devices/*/uevent)"
|
|
list="$list $(echo /sys/class/*/*/uevent)"
|
|
list="$list $(echo /sys/block/*/uevent /sys/block/*/*/uevent)"
|
|
for i in $list; do
|
|
case "$i" in
|
|
*/device/uevent)
|
|
# skip followed device symlinks
|
|
continue
|
|
;;
|
|
*/class/mem/*|*/class/tty/*)
|
|
first="$first $i"
|
|
;;
|
|
*/block/md*)
|
|
last="$last $i"
|
|
;;
|
|
*/*)
|
|
default="$default $i"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# trigger the sorted events
|
|
for i in $first $default $last; do
|
|
echo "add" > "$i"
|
|
done
|
|
}
|
|
|
|
populate_udev() {
|
|
# populate /dev with devices already found by the kernel
|
|
#if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then
|
|
#ebegin "Populating /dev with existing devices through uevents"
|
|
#trigger_events
|
|
#eend 0
|
|
#else
|
|
echo "Populating /dev with existing devices with udevstart..."
|
|
/sbin/udevstart
|
|
#fi
|
|
|
|
# loop until everything is finished
|
|
# there's gotta be a better way...
|
|
echo "Letting udev process events..."
|
|
loop=0
|
|
while test -d /dev/.udev/queue; do
|
|
sleep 0.1;
|
|
test "$loop" -gt 300 && break
|
|
loop=$(($loop + 1))
|
|
done
|
|
#einfo "loop = $loop"
|
|
|
|
return 0
|
|
}
|
|
|
|
seed_dev() {
|
|
# Seed /dev with some things that we know we need
|
|
echo "Seeding /dev with needed nodes..."
|
|
|
|
# copy over any persistant things
|
|
cp --preserve=all --recursive --update /lib/udev/devices/* /dev
|
|
|
|
# Not provided by sysfs but needed
|
|
ln -snf /proc/self/fd /dev/fd
|
|
ln -snf fd/0 /dev/stdin
|
|
ln -snf fd/1 /dev/stdout
|
|
ln -snf fd/2 /dev/stderr
|
|
[[ -e /proc/kcore ]] && ln -snf /proc/kcore /dev/core
|
|
|
|
# Create problematic directories
|
|
mkdir -p /dev/{pts,shm}
|
|
}
|
|
|
|
|
|
main() {
|
|
# Setup temporary storage for /dev
|
|
#echo "Mounting /dev for udev"
|
|
#if [[ ${RC_USE_FSTAB} == "yes" ]] ; then
|
|
#mntcmd=$(get_mount_fstab /dev)
|
|
#else
|
|
#unset mntcmd
|
|
#fi
|
|
#if [[ -n ${mntcmd} ]] ; then
|
|
#try mount -n ${mntcmd}
|
|
#else
|
|
#if egrep -qs tmpfs /proc/filesystems ; then
|
|
mntcmd="tmpfs"
|
|
#else
|
|
#mntcmd="ramfs"
|
|
#fi
|
|
# many video drivers require exec access in /dev #92921
|
|
mount -n -t ${mntcmd} udev /dev -o exec,nosuid,mode=0755
|
|
#fi
|
|
#eend $?
|
|
|
|
# Selinux lovin; /selinux should be mounted by selinux-patched init
|
|
#if [[ -x /sbin/restorecon && -c /selinux/null ]] ; then
|
|
#restorecon /dev &> /selinux/null
|
|
#fi
|
|
|
|
# Actually get udev rolling
|
|
#if [[ ${RC_DEVICE_TARBALL} == "yes" && \
|
|
#-s /lib/udev-state/devices.tar.bz2 ]] ; then
|
|
#ebegin "Populating /dev with saved device nodes"
|
|
#try tar -jxpf /lib/udev-state/devices.tar.bz2 -C /dev
|
|
#eend $?
|
|
#fi
|
|
|
|
seed_dev
|
|
|
|
# Setup hotplugging (if possible)
|
|
echo -n "Setting up hotplug agent... "
|
|
if [[ -e /proc/sys/kernel/hotplug ]] ; then
|
|
#if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then
|
|
#einfo " Using netlink for hotplug events..."
|
|
#echo "" > /proc/sys/kernel/hotplug
|
|
if [[ $(udev_version) -ge "48" ]] ; then
|
|
echo "/sbin/udevsend"
|
|
echo "/sbin/udevsend" > /proc/sys/kernel/hotplug
|
|
elif [[ -x /sbin/hotplug ]] ; then
|
|
echo "/sbin/hotplug"
|
|
else
|
|
echo "/sbin/udev"
|
|
echo "/sbin/udev" > /proc/sys/kernel/hotplug
|
|
fi
|
|
fi
|
|
#eend 0
|
|
|
|
echo "Starting udevd..."
|
|
/sbin/udevd --daemon
|
|
#eend $?
|
|
|
|
populate_udev
|
|
|
|
# Create nodes that udev can't
|
|
echo "Finalizing udev configuration..."
|
|
[[ -x /sbin/dmsetup ]] && /sbin/dmsetup mknodes &>/dev/null
|
|
[[ -x /sbin/lvm ]] && \
|
|
/sbin/lvm vgscan -P --mknodes --ignorelockingfailure &>/dev/null
|
|
[[ -x /sbin/evms_activate ]] && /sbin/evms_activate -q &>/dev/null
|
|
#eend 0
|
|
|
|
# Same thing as /dev/.devfsd
|
|
touch /dev/.udev
|
|
}
|
|
|
|
main
|
|
|
|
# vim:ts=4
|