summaryrefslogtreecommitdiff
path: root/recipes/udev/files
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/udev/files
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/udev/files')
-rw-r--r--recipes/udev/files/50-hostap_cs.rules4
-rw-r--r--recipes/udev/files/akita/mount.blacklist6
-rw-r--r--recipes/udev/files/c7x0/mount.blacklist6
-rw-r--r--recipes/udev/files/devfs-udev.rules108
-rw-r--r--recipes/udev/files/fix-alignment.patch24
-rwxr-xr-xrecipes/udev/files/init212
-rw-r--r--recipes/udev/files/links.conf24
-rw-r--r--recipes/udev/files/local.rules22
-rw-r--r--recipes/udev/files/mount.blacklist3
-rw-r--r--recipes/udev/files/mount.sh72
-rw-r--r--recipes/udev/files/network.sh58
-rw-r--r--recipes/udev/files/noasmlinkage.patch38
-rw-r--r--recipes/udev/files/permissions.rules79
-rw-r--r--recipes/udev/files/slugos/mount.blacklist5
-rw-r--r--recipes/udev/files/slugos/mount.sh83
-rw-r--r--recipes/udev/files/spitz/mount.blacklist7
-rw-r--r--recipes/udev/files/tmpfs.patch16
-rw-r--r--recipes/udev/files/tosa/mount.blacklist6
-rw-r--r--recipes/udev/files/udev.rules98
-rw-r--r--recipes/udev/files/udev_network_queue.sh35
-rw-r--r--recipes/udev/files/udevsynthesize.patch776
-rw-r--r--recipes/udev/files/udevsynthesize.sh51
22 files changed, 1733 insertions, 0 deletions
diff --git a/recipes/udev/files/50-hostap_cs.rules b/recipes/udev/files/50-hostap_cs.rules
new file mode 100644
index 0000000000..efefdc58fc
--- /dev/null
+++ b/recipes/udev/files/50-hostap_cs.rules
@@ -0,0 +1,4 @@
+# hostap_cs needs ignore_cis_vcc=1 set - this should handle all cards
+#
+ACTION=="add", DEVICE=="hostap_cs", \
+ SYSFS{func_id}=="0x06", RUN+="/sbin/modprobe hostap_cs ignore_cis_vcc=1"
diff --git a/recipes/udev/files/akita/mount.blacklist b/recipes/udev/files/akita/mount.blacklist
new file mode 100644
index 0000000000..7e351bc988
--- /dev/null
+++ b/recipes/udev/files/akita/mount.blacklist
@@ -0,0 +1,6 @@
+# This is a grep pattern matched against the device name
+# Any matched pattern will _not_ be mounted / removed by udevd
+
+/dev/mtdblock
+/dev/loop
+/dev/ram \ No newline at end of file
diff --git a/recipes/udev/files/c7x0/mount.blacklist b/recipes/udev/files/c7x0/mount.blacklist
new file mode 100644
index 0000000000..7e351bc988
--- /dev/null
+++ b/recipes/udev/files/c7x0/mount.blacklist
@@ -0,0 +1,6 @@
+# This is a grep pattern matched against the device name
+# Any matched pattern will _not_ be mounted / removed by udevd
+
+/dev/mtdblock
+/dev/loop
+/dev/ram \ No newline at end of file
diff --git a/recipes/udev/files/devfs-udev.rules b/recipes/udev/files/devfs-udev.rules
new file mode 100644
index 0000000000..0ba1ad4e7f
--- /dev/null
+++ b/recipes/udev/files/devfs-udev.rules
@@ -0,0 +1,108 @@
+# The use of these rules is not recommended or supported.
+# In a world where devices can come and go at any time, the devfs scheme
+# of simple device enumeration does not help _anything_. Just forget about
+# it. Use custom rules to name your device or look at the persistent device
+# naming scheme, which is implemented for disks and add your subsystem.
+
+# ide block devices
+BUS="ide", KERNEL="hd*", PROGRAM="/etc/udev/ide-devfs.sh %k %b %n", NAME="%k", SYMLINK="%c{1} %c{2}"
+
+# md block devices
+KERNEL="md[0-9]*", NAME="md/%n"
+
+# floppy devices
+KERNEL="fd[0-9]*", NAME="floppy/%n"
+
+# tty devices
+KERNEL="tty[0-9]*", NAME="vc/%n", SYMLINK="%k"
+KERNEL="ttyS[0-9]*", NAME="tts/%n", SYMLINK="%k"
+KERNEL="ttyUSB[0-9]*", NAME="tts/USB%n"
+
+# vc devices
+KERNEL="vcs", NAME="vcc/0"
+KERNEL="vcs[0-9]*", NAME="vcc/%n"
+KERNEL="vcsa", NAME="vcc/a0"
+KERNEL="vcsa[0-9]*", NAME="vcc/a%n"
+
+# v4l devices
+KERNEL="video[0-9]*", NAME="v4l/video%n"
+KERNEL="radio[0-9]*", NAME="v4l/radio%n"
+KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
+KERNEL="vtx[0-9]*", NAME="v4l/vtx%n"
+
+# dm devices (ignore them)
+KERNEL="dm-[0-9]*", NAME=""
+
+# i2c devices
+KERNEL="i2c-[0-9]*", NAME="i2c/%n", SYMLINK="%k"
+
+# loop devices
+KERNEL="loop[0-9]*", NAME="loop/%n", SYMLINK="%k"
+
+# ramdisks
+KERNEL="ram[0-9]*", NAME="rd/%n", SYMLINK="%k"
+
+# framebuffer devices
+KERNEL="fb[0-9]*", NAME="fb/%n", SYMLINK="%k"
+
+# misc
+KERNEL="rtc", NAME="misc/%k", SYMLINK="%k"
+KERNEL="psaux", NAME="misc/%k", SYMLINK="%k"
+KERNEL="agpgart", NAME="misc/%k", SYMLINK="%k"
+KERNEL="rtc", NAME="misc/%k", SYMLINK="%k"
+KERNEL="psaux", NAME="misc/%k", SYMLINK="%k"
+KERNEL="uinput", NAME="misc/%k", SYMLINK="%k"
+
+# alsa devices
+KERNEL="controlC[0-9]*", NAME="snd/%k"
+KERNEL="hw[CD0-9]*", NAME="snd/%k"
+KERNEL="pcm[CD0-9cp]*", NAME="snd/%k"
+KERNEL="midi[CD0-9]*", NAME="snd/%k"
+KERNEL="timer", NAME="snd/%k"
+KERNEL="seq", NAME="snd/%k"
+
+# oss devices
+KERNEL="audio*", NAME="sound/%k", SYMLINK="%k"
+KERNEL="dmmidi", NAME="sound/%k", SYMLINK="%k"
+KERNEL="dsp*", NAME="sound/%k", SYMLINK="%k"
+KERNEL="midi*", NAME="sound/%k", SYMLINK="%k"
+KERNEL="mixer*", NAME="sound/%k", SYMLINK="%k"
+KERNEL="sequencer*", NAME="sound/%k", SYMLINK="%k"
+
+# input devices
+KERNEL="mice", NAME="input/%k"
+KERNEL="mouse*", NAME="input/%k"
+KERNEL="event*", NAME="input/%k"
+KERNEL="js*", NAME="input/%k"
+KERNEL="ts*", NAME="input/%k"
+
+# USB devices
+KERNEL="hiddev*", NAME="usb/%k"
+KERNEL="auer*", NAME="usb/%k"
+KERNEL="legousbtower*", NAME="usb/%k"
+KERNEL="dabusb*", NAME="usb/%k"
+BUS="usb", KERNEL="lp[0-9]*", NAME="usb/%k"
+
+# netlink devices
+KERNEL="route", NAME="netlink/%k"
+KERNEL="skip", NAME="netlink/%k"
+KERNEL="usersock", NAME="netlink/%k"
+KERNEL="fwmonitor", NAME="netlink/%k"
+KERNEL="tcpdiag", NAME="netlink/%k"
+KERNEL="nflog", NAME="netlink/%k"
+KERNEL="xfrm", NAME="netlink/%k"
+KERNEL="arpd", NAME="netlink/%k"
+KERNEL="route6", NAME="netlink/%k"
+KERNEL="ip6_fw", NAME="netlink/%k"
+KERNEL="dnrtmsg", NAME="netlink/%k"
+KERNEL="tap*", NAME="netlink/%k"
+
+# CAPI devices
+KERNEL="capi", NAME="capi20", SYMLINK="isdn/capi20"
+KERNEL="capi*", NAME="capi/%n"
+
+# Network devices
+KERNEL="tun", NAME="net/%k"
+
+# raw devices
+KERNEL="raw[0-9]*", NAME="raw/%k"
diff --git a/recipes/udev/files/fix-alignment.patch b/recipes/udev/files/fix-alignment.patch
new file mode 100644
index 0000000000..8c7b8b5ac5
--- /dev/null
+++ b/recipes/udev/files/fix-alignment.patch
@@ -0,0 +1,24 @@
+diff --git a/udev_rules_parse.c b/udev_rules_parse.c
+--- a/udev_rules_parse.c
++++ b/udev_rules_parse.c
+@@ -241,6 +241,7 @@ static int add_to_rules(struct udev_rule
+ int valid;
+ char *linepos;
+ char *attr;
++ size_t padding;
+ int retval;
+
+ /* get all the keys */
+@@ -506,6 +507,11 @@ static int add_to_rules(struct udev_rule
+
+ /* grow buffer and add rule */
+ rule_size = sizeof(struct udev_rule) + rule->bufsize;
++ padding = (sizeof(size_t) - rule_size % sizeof(size_t)) % sizeof(size_t);
++ dbg("add %zi padding bytes", padding);
++ rule_size += padding;
++ rule->bufsize += padding;
++
+ rules->buf = realloc(rules->buf, rules->bufsize + rule_size);
+ if (!rules->buf) {
+ err("realloc failed");
+
diff --git a/recipes/udev/files/init b/recipes/udev/files/init
new file mode 100755
index 0000000000..a13b9afcd5
--- /dev/null
+++ b/recipes/udev/files/init
@@ -0,0 +1,212 @@
+#!/bin/sh
+
+UDEVSTART=/sbin/udevstart
+
+# defaults
+tmpfs_size="2M"
+udev_root="/dev"
+
+[ -x $UDEVSTART ] || exit 0
+
+. /etc/udev/udev.conf
+
+##############################################################################
+
+# we need to unmount /dev/pts/ and remount it later over the tmpfs
+unmount_devpts() {
+ if mountpoint -q /dev/pts/; then
+ umount -l /dev/pts/
+ fi
+
+ if mountpoint -q /dev/shm/; then
+ umount -l /dev/shm/
+ fi
+}
+
+# mount a tmpfs over /dev, if somebody did not already do it
+mount_tmpfs() {
+ if grep -E -q "^[^[:space:]]+ /dev tmpfs" /proc/mounts; then
+ return 0
+ fi
+
+ # /dev/.static/dev/ is used by MAKEDEV to access the real /dev/ directory.
+ # /etc/udev/ is recycled as a temporary mount point because it's the only
+ # directory which is guaranteed to be available.
+ mount -n -o bind /dev /etc/udev
+
+ if ! mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs tmpfs /dev; then
+ umount /etc/udev
+ echo "udev requires tmpfs support, not started."
+ exit 1
+ fi
+
+ # using ln to test if /dev works, because touch is in /usr/bin/
+ if ln -s test /dev/test-file; then
+ rm /dev/test-file
+ else
+ echo "udev requires tmpfs support, not started."
+ umount /etc/udev
+ umount /dev
+ exit 1
+ fi
+
+ mkdir -p /dev/.static/dev
+ chmod 700 /dev/.static/
+ # The mount options in busybox are non-standard...
+ if test -x /bin/mount.util-linux
+ then
+ /bin/mount.util-linux --move /etc/udev /dev/.static/dev
+ elif test -x /bin/busybox
+ then
+ busybox mount -n -o move /etc/udev /dev/.static/dev
+ else
+ echo "udev requires an identifiable mount command, not started."
+ umount /etc/udev
+ umount /dev
+ exit 1
+ fi
+}
+
+# I hate this hack. -- Md
+make_extra_nodes() {
+ [ -e /etc/udev/links.conf ] || return 0
+ grep '^[^#]' /etc/udev/links.conf | \
+ while read type name arg1; do
+ [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
+ case "$type" in
+ L) ln -s $arg1 /dev/$name ;;
+ D) mkdir -p /dev/$name ;;
+ M) mknod -m 600 /dev/$name $arg1 ;;
+ *) echo "links.conf: unparseable line ($type $name $arg1)" ;;
+ esac
+ done
+}
+
+# this function is duplicated in preinst, postinst and d-i
+supported_kernel() {
+ case "$(uname -r)" in
+ 2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
+ 2.6.1[01]|2.6.1[01][!0-9]*) return 1 ;;
+ esac
+ return 0
+}
+
+# shell version of /usr/bin/tty
+my_tty() {
+ [ -x /bin/readlink ] || return 0
+ [ -e /proc/self/fd/0 ] || return 0
+ readlink --silent /proc/self/fd/0 || true
+}
+
+warn_if_interactive() {
+ if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then
+ return 0
+ fi
+
+ TTY=$(my_tty)
+ if [ -z "$TTY" -o "$TTY" = "/dev/console" ]; then
+ return 0
+ fi
+
+ printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n"
+ printf "has been run from an interactive shell.\n"
+ printf "It will probably not do what you expect, so this script will wait\n"
+ printf "60 seconds before continuing. Press ^C to stop it.\n"
+ printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n"
+ sleep 60
+}
+
+##############################################################################
+
+if ! supported_kernel; then
+ echo "udev requires a kernel >= 2.6.12, not started."
+ exit 1
+fi
+
+if [ ! -e /proc/filesystems ]; then
+ echo "udev requires a mounted procfs, not started."
+ exit 1
+fi
+
+if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
+ echo "udev requires tmpfs support, not started."
+ exit 1
+fi
+
+if [ ! -d /sys/class/ ]; then
+ echo "udev requires a mounted sysfs, not started."
+ exit 1
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ] && [ ! -e /sys/kernel/uevent_helper ]; then
+ echo "udev requires hotplug support, not started."
+ exit 1
+fi
+
+##############################################################################
+
+# When modifying this script, do not forget that between the time that
+# the new /dev has been mounted and udevstart has been run there will be
+# no /dev/null. This also means that you cannot use the "&" shell command.
+
+case "$1" in
+ start)
+ if [ -e "$udev_root/.udevdb" ]; then
+ if mountpoint -q /dev/; then
+ TMPFS_MOUNTED=1
+ else
+ echo ".udevdb already exists on the old $udev_root!"
+ fi
+ fi
+ warn_if_interactive
+
+ #echo /sbin/udevsend > /proc/sys/kernel/hotplug
+ if [ -e /sys/kernel/uevent_helper ] ; then
+ echo "" > /sys/kernel/uevent_helper
+ else
+ echo "" > /proc/sys/kernel/hotplug
+ fi
+ udevsend
+ if [ "$UDEV_DISABLED" = "yes" ]; then
+ echo "udev disabled on the kernel command line, not started."
+ exit 0
+ fi
+
+ if [ ! "$TMPFS_MOUNTED" ]; then
+ unmount_devpts
+ mount_tmpfs
+ [ -d /proc/1 ] || mount -n /proc
+ # if this directory is not present /dev will not be updated by udev
+ mkdir /dev/.udevdb/
+ echo "Creating initial device nodes..."
+ udevstart
+ fi
+ make_extra_nodes
+ ;;
+ stop)
+ warn_if_interactive
+ start-stop-daemon --stop --exec /sbin/udevd --quiet
+ unmount_devpts
+ if [ -d /dev/.static/dev/ ]; then
+ umount -l /dev/.static/dev/ || true
+ fi
+ echo "Unmounting /dev..."
+ # unmounting with -l should never fail
+ if ! umount -l /dev; then
+ exit 1
+ fi
+ ;;
+ restart|force-reload)
+ start-stop-daemon --stop --exec /sbin/udevd --quiet
+ log_begin_msg "Recreating device nodes..."
+ udevstart
+ make_extra_nodes
+ log_end_msg 0
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/recipes/udev/files/links.conf b/recipes/udev/files/links.conf
new file mode 100644
index 0000000000..a9f8b58b27
--- /dev/null
+++ b/recipes/udev/files/links.conf
@@ -0,0 +1,24 @@
+# This file does not exist. Please do not ask the debian maintainer about it.
+# You may use it to do strange and wonderful things, at your risk.
+
+L fd /proc/self/fd
+L stdin /proc/self/fd/0
+L stdout /proc/self/fd/1
+L stderr /proc/self/fd/2
+L core /proc/kcore
+L sndstat /proc/asound/oss/sndstat
+L MAKEDEV /sbin/MAKEDEV
+
+D pts
+D shm
+
+M null c 1 3
+M console c 5 1
+
+# Hic sunt leones.
+M ppp c 108 0
+D loop
+M loop/0 b 7 0
+D net
+M net/tun c 10 200
+
diff --git a/recipes/udev/files/local.rules b/recipes/udev/files/local.rules
new file mode 100644
index 0000000000..5f2efbeb0c
--- /dev/null
+++ b/recipes/udev/files/local.rules
@@ -0,0 +1,22 @@
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+# Media automounting
+SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
+SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
+
+# Handle network interface setup
+SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh"
+SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh"
diff --git a/recipes/udev/files/mount.blacklist b/recipes/udev/files/mount.blacklist
new file mode 100644
index 0000000000..d3ebb17176
--- /dev/null
+++ b/recipes/udev/files/mount.blacklist
@@ -0,0 +1,3 @@
+/dev/loop
+/dev/ram
+/dev/mtdblock
diff --git a/recipes/udev/files/mount.sh b/recipes/udev/files/mount.sh
new file mode 100644
index 0000000000..be8b3dfca9
--- /dev/null
+++ b/recipes/udev/files/mount.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# Called from udev
+# Attemp to mount any added block devices
+# and remove any removed devices
+#
+
+MOUNT="/bin/mount"
+PMOUNT="/usr/bin/pmount"
+UMOUNT="/bin/umount"
+name="`basename "$DEVNAME"`"
+
+for line in `cat /etc/udev/mount.blacklist | grep -v ^#`
+do
+ if ( echo "$DEVNAME" | grep -q "$line" )
+ then
+ logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring"
+ exit 0
+ fi
+done
+
+automount() {
+ ! test -d "/media/$name" && mkdir -p "/media/$name"
+
+ if ! $MOUNT -t auto -o sync $DEVNAME "/media/$name"
+ then
+ #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/media/$name\" failed!"
+ rm_dir "/media/$name"
+ else
+ logger "mount.sh/automount" "Auto-mount of [/media/$name] successful"
+ touch "/tmp/.automount-$name"
+ fi
+}
+
+rm_dir() {
+ # We do not want to rm -r populated directories
+ if test "`find "$1" | wc -l | tr -d " "`" -lt 2 -a -d "$1"
+ then
+ ! test -z "$1" && rm -r "$1"
+ else
+ logger "mount.sh/automount" "Not removing non-empty directory [$1]"
+ fi
+}
+
+if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then
+ if [ -x "$PMOUNT" ]; then
+ $PMOUNT $DEVNAME 2> /dev/null
+ elif [ -x $MOUNT ]; then
+ $MOUNT $DEVNAME 2> /dev/null
+ fi
+
+ # If the device isn't mounted at this point, it isn't configured in fstab
+ # 20061107: Small correction: The rootfs partition may be called just "rootfs" and not by
+ # its true device name so this would break. If the rootfs is mounted on two places
+ # during boot, it confuses the heck out of fsck. So Im auto-adding the root-partition
+ # to /etc/udev/mount.blacklist via postinst
+
+ cat /proc/mounts | awk '{print $1}' | grep -q "^$DEVNAME$" || automount
+
+fi
+
+
+
+if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
+ for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
+ do
+ $UMOUNT $mnt
+ done
+
+ # Remove empty directories from auto-mounter
+ test -e "/tmp/.automount-$name" && rm_dir "/media/$name"
+fi
diff --git a/recipes/udev/files/network.sh b/recipes/udev/files/network.sh
new file mode 100644
index 0000000000..182c26d86a
--- /dev/null
+++ b/recipes/udev/files/network.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# udevd does clearenv(). Export shell PATH to children.
+export PATH
+
+# Do not run when pcmcia-cs is installed
+test -x /sbin/cardctl && exit 0
+
+# We get two "add" events for hostap cards due to wifi0
+echo "$INTERFACE" | grep -q wifi && exit 0
+
+
+# Check if /etc/init.d/network has been run yet to see if we are
+# called by starting /etc/rcS.d/S03udev and not by hotplugging a device
+#
+# At this stage, network interfaces should not be brought up
+# automatically because:
+# a) /etc/init.d/network has not been run yet (security issue)
+# b) /var has not been populated yet so /etc/resolv,conf points to
+# oblivion, making the network unusable
+#
+
+spoofp="`grep ^spoofprotect /etc/network/options`"
+if test -z "$spoofp"
+then
+ # This is the default from /etc/init.d/network
+ spoofp_val=yes
+else
+ spoofp_val=${spoofp#spoofprotect=}
+fi
+
+test "$spoofp_val" = yes && spoofp_val=1 || spoofp_val=0
+
+# I think it is safe to assume that "lo" will always be there ;)
+if test "`cat /proc/sys/net/ipv4/conf/lo/rp_filter`" != "$spoofp_val" -a -n "$spoofp_val"
+then
+ echo "$INTERFACE" >> /dev/udev_network_queue
+ exit 0
+fi
+
+#
+# Code taken from pcmcia-cs:/etc/pcmcia/network
+#
+
+# if this interface has an entry in /etc/network/interfaces, let ifupdown
+# handle it
+if grep -q "iface \+$INTERFACE" /etc/network/interfaces; then
+ case $ACTION in
+ add)
+ ifconfig | grep -q "^$INTERFACE" || ifup $INTERFACE
+ ;;
+ remove)
+ ifdown $INTERFACE
+ ;;
+ esac
+
+ exit 0
+fi
diff --git a/recipes/udev/files/noasmlinkage.patch b/recipes/udev/files/noasmlinkage.patch
new file mode 100644
index 0000000000..0d8e854c0e
--- /dev/null
+++ b/recipes/udev/files/noasmlinkage.patch
@@ -0,0 +1,38 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- udev-062/udev.c~noasmlinkage.patch
++++ udev-062/udev.c
+@@ -54,7 +54,7 @@
+ }
+ #endif
+
+-static void asmlinkage sig_handler(int signum)
++static void sig_handler(int signum)
+ {
+ switch (signum) {
+ case SIGALRM:
+--- udev-062/udevd.c~noasmlinkage.patch
++++ udev-062/udevd.c
+@@ -639,7 +639,7 @@
+ return msg;
+ }
+
+-static void asmlinkage sig_handler(int signum)
++static void sig_handler(int signum)
+ {
+ int rc;
+
+--- udev-062/udevstart.c~noasmlinkage.patch
++++ udev-062/udevstart.c
+@@ -323,7 +323,7 @@
+ exec_list(&device_list);
+ }
+
+-static void asmlinkage sig_handler(int signum)
++static void sig_handler(int signum)
+ {
+ switch (signum) {
+ case SIGALRM:
diff --git a/recipes/udev/files/permissions.rules b/recipes/udev/files/permissions.rules
new file mode 100644
index 0000000000..efbe568a2b
--- /dev/null
+++ b/recipes/udev/files/permissions.rules
@@ -0,0 +1,79 @@
+# default permissions for block devices
+SUBSYSTEM=="block", GROUP="disk"
+SUBSYSTEM=="block", SYSFS{removable}=="1", GROUP="floppy"
+
+# IDE devices
+BUS=="ide", KERNEL=="hd[a-z]", SYSFS{removable}="1", \
+ PROGRAM="/bin/cat /proc/ide/%k/media", RESULT=="cdrom*", GROUP="cdrom"
+BUS=="ide", KERNEL=="ht[0-9]*", GROUP="tape"
+BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape"
+
+# SCSI devices
+BUS=="scsi", SYSFS{type}=="1", GROUP="tape"
+BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom"
+
+# USB devices
+BUS=="usb", KERNEL=="legousbtower*", MODE="0666"
+BUS=="usb", KERNEL=="lp[0-9]*", GROUP="lp"
+
+# serial devices
+SUBSYSTEM=="tty", GROUP="dialout"
+SUBSYSTEM=="capi", GROUP="dialout"
+SUBSYSTEM=="slamr", GROUP="dialout"
+
+# vc devices (all members of the tty subsystem)
+KERNEL=="ptmx", MODE="0666", GROUP="root"
+KERNEL=="console", MODE="0600", GROUP="root"
+KERNEL=="tty", MODE="0666", GROUP="root"
+KERNEL=="tty[0-9]*", GROUP="root"
+KERNEL=="pty*", MODE="0666", GROUP="tty"
+
+# video devices
+SUBSYSTEM=="video4linux", GROUP="video"
+SUBSYSTEM=="drm", GROUP="video"
+SUBSYSTEM=="dvb", GROUP="video"
+SUBSYSTEM=="em8300", GROUP="video"
+SUBSYSTEM=="graphics", GROUP="video"
+SUBSYSTEM=="nvidia", GROUP="video"
+
+# misc devices
+KERNEL=="random", MODE="0666"
+KERNEL=="urandom", MODE="0444"
+KERNEL=="mem", MODE="0640", GROUP="kmem"
+KERNEL=="kmem", MODE="0640", GROUP="kmem"
+KERNEL=="port", MODE="0640", GROUP="kmem"
+KERNEL=="full", MODE="0666"
+KERNEL=="null", MODE="0666"
+KERNEL=="zero", MODE="0666"
+KERNEL=="inotify", MODE="0666"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="agpgart", GROUP="video"
+KERNEL=="rtc", MODE="0660", GROUP="audio"
+
+KERNEL=="cdemu[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd", MODE="0644"
+
+# printers and parallel devices
+SUBSYSTEM=="printer", GROUP="lp"
+SUBSYSTEM=="ppdev", GROUP="lp"
+KERNEL=="pt[0-9]*", GROUP="tape"
+KERNEL=="pht[0-9]*", GROUP="tape"
+
+# sound devices
+SUBSYSTEM=="sound", GROUP="audio"
+
+# ieee1394 devices
+KERNEL=="raw1394", GROUP="disk"
+KERNEL=="dv1394*", GROUP="video"
+KERNEL=="video1394*", GROUP="video"
+
+# input devices
+KERNEL=="event[0-9]*", MODE="0664"
+KERNEL=="js[0-9]*", MODE="0664"
+
+# AOE character devices
+SUBSYSTEM=="aoe", MODE="0220", GROUP="disk"
+SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
+
diff --git a/recipes/udev/files/slugos/mount.blacklist b/recipes/udev/files/slugos/mount.blacklist
new file mode 100644
index 0000000000..d9da5cfd71
--- /dev/null
+++ b/recipes/udev/files/slugos/mount.blacklist
@@ -0,0 +1,5 @@
+ram[0-9]$
+mtdblock[0-9]$
+hd[a-z]$
+sd[a-z]$
+loop[0-9]$
diff --git a/recipes/udev/files/slugos/mount.sh b/recipes/udev/files/slugos/mount.sh
new file mode 100644
index 0000000000..0990a7e85a
--- /dev/null
+++ b/recipes/udev/files/slugos/mount.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+#
+# Called from udev
+# Attemp to mount any added block devices
+# and remove any removed devices
+#
+
+MOUNT="/bin/mount"
+PMOUNT="/usr/bin/pmount"
+UMOUNT="/bin/umount"
+name="`basename "$DEVNAME"`"
+
+if ( blkid "$DEVNAME" | grep -q 'TYPE="mdraid"' )
+then
+ logger "udev/mount.sh" "[$DEVNAME] is a member of an array, ignoring"
+ exit 0
+fi
+
+for line in `cat /etc/udev/mount.blacklist | grep -v ^#`
+do
+ if ( echo "$DEVNAME" | grep -q "$line" )
+ then
+ logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring"
+ exit 0
+ fi
+done
+
+automount() {
+ ! test -d "/media/$name" && mkdir -p "/media/$name"
+
+ if ! $MOUNT -t auto -o sync $DEVNAME "/media/$name"
+ then
+ #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/media/$name\" failed!"
+ rm_dir "/media/$name"
+ else
+ logger "mount.sh/automount" "Auto-mount of [/media/$name] successful"
+ touch "/tmp/.automount-$name"
+ fi
+}
+
+rm_dir() {
+ # We do not want to rm -r populated directories
+ if test "`find "$1" | wc -l | tr -d " "`" -lt 2 -a -d "$1"
+ then
+ ! test -z "$1" && rm -r "$1"
+ else
+ logger "mount.sh/automount" "Not removing non-empty directory [$1]"
+ fi
+}
+
+if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then
+ # SlugOS: we pivot to the rootfs based on UUID, not on fstab -- so the fstab may not
+ # be correct at this point in the boot. So we must not let udev mount devices based
+ # soley on the fstab, lest we mount overtop the real rootfs. For now we just comment
+ # out the logic below and let the automount logic (far below) deal with all udev mount
+ # operations.
+ #if [ -x "$PMOUNT" ]; then
+ # $PMOUNT $DEVNAME 2> /dev/null
+ #elif [ -x $MOUNT ]; then
+ # $MOUNT $DEVNAME 2> /dev/null
+ #fi
+
+ # If the device isn't mounted at this point, it isn't configured in fstab
+ # 20061107: Small correction: The rootfs partition may be called just "rootfs" and not by
+ # its true device name so this would break. If the rootfs is mounted on two places
+ # during boot, it confuses the heck out of fsck. So Im auto-adding the root-partition
+ # to /etc/udev/mount.blacklist via postinst
+
+ cat /proc/mounts | awk '{print $1}' | grep -q "^$DEVNAME$" || automount
+
+fi
+
+
+
+if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
+ for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
+ do
+ $UMOUNT $mnt
+ done
+
+ # Remove empty directories from auto-mounter
+ test -e "/tmp/.automount-$name" && rm_dir "/media/$name"
+fi
diff --git a/recipes/udev/files/spitz/mount.blacklist b/recipes/udev/files/spitz/mount.blacklist
new file mode 100644
index 0000000000..38c7aa4b32
--- /dev/null
+++ b/recipes/udev/files/spitz/mount.blacklist
@@ -0,0 +1,7 @@
+# This is a grep pattern matched against the device name
+# Any matched pattern will _not_ be mounted / removed by udevd
+
+/dev/mtdblock
+/dev/hda
+/dev/loop
+/dev/ram \ No newline at end of file
diff --git a/recipes/udev/files/tmpfs.patch b/recipes/udev/files/tmpfs.patch
new file mode 100644
index 0000000000..9d0d8b4515
--- /dev/null
+++ b/recipes/udev/files/tmpfs.patch
@@ -0,0 +1,16 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- udev-031/extras/start_udev~tmpfs 2004-09-10 17:10:03.000000000 -0400
++++ udev-031/extras/start_udev 2004-09-11 15:18:15.560789160 -0400
+@@ -85,7 +85,7 @@
+ fi
+
+ echo "mounting... ramfs at $udev_root"
+-mount -n -t ramfs none $udev_root
++mount -n -t ramfs none $udev_root || mount -n -t tmpfs none $udev_root
+
+ # propogate /udev from /sys
+ echo "Creating initial udev device nodes:"
diff --git a/recipes/udev/files/tosa/mount.blacklist b/recipes/udev/files/tosa/mount.blacklist
new file mode 100644
index 0000000000..7e351bc988
--- /dev/null
+++ b/recipes/udev/files/tosa/mount.blacklist
@@ -0,0 +1,6 @@
+# This is a grep pattern matched against the device name
+# Any matched pattern will _not_ be mounted / removed by udevd
+
+/dev/mtdblock
+/dev/loop
+/dev/ram \ No newline at end of file
diff --git a/recipes/udev/files/udev.rules b/recipes/udev/files/udev.rules
new file mode 100644
index 0000000000..5c566f6cef
--- /dev/null
+++ b/recipes/udev/files/udev.rules
@@ -0,0 +1,98 @@
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+# SCSI devices
+BUS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"
+
+# USB devices
+BUS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k"
+BUS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k"
+BUS=="usb", KERNEL=="dabusb*", NAME="usb/%k"
+BUS=="usb", KERNEL=="hiddev*", NAME="usb/%k"
+BUS=="usb", KERNEL=="legousbtower*", NAME="usb/%k"
+BUS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k"
+BUS=="usb", KERNEL=="ttyUSB*", SYSFS{product}=="Palm Handheld*", \
+ SYMLINK+="pilot"
+
+# usbfs-like devices
+SUBSYSTEM=="usb_device", \
+ PROGRAM="/bin/sh -c 'export X=%k; export X=$${X#usbdev}; export B=$${X%%%%.*}; export D=$${X#*.}; echo bus/usb/$$B/$$D'", SYMLINK+="%c"
+
+# serial devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
+KERNEL=="capi[0-9]*", NAME="capi/%n"
+
+# video devices
+KERNEL=="card[0-9]*", NAME="dri/%k"