udev: drop 145 version

The 164 version has been the default version for some time and as we
don't have any clear reasoning to keep 145 around, we're removing it
now.

Some files were also removed as 164 recipe provides specific versions
of it and thus those were going to be unused.

(From OE-Core rev: 7376f027c39716561b513a70f6e7f86fb14df178)

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Otavio Salvador
2011-12-20 13:00:05 +00:00
committed by Richard Purdie
parent a99a63959b
commit f4e60ec827
20 changed files with 0 additions and 1965 deletions

View File

@@ -1,26 +0,0 @@
Upstream-Status: Pending
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");

View File

@@ -1,212 +0,0 @@
#!/bin/sh -e
UDEVSTART=/sbin/udevstart
# defaults
tmpfs_size="10M"
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

View File

@@ -1,22 +0,0 @@
# 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"

View File

@@ -1,39 +0,0 @@
Upstream-Status: Inappropriate [embedded]
#
# 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:

View File

@@ -1,81 +0,0 @@
# 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"
BUS=="scsi", SYSFS{type}=="6", GROUP="scanner"
# 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=="nvram", GROUP="nvram"
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"

View File

@@ -1,17 +0,0 @@
Upstream-Status: Inappropriate [embedded]
#
# 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:"

View File

@@ -1,98 +0,0 @@
# 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"
# misc devices
KERNEL=="hw_random", NAME="hwrng"
KERNEL=="tun", NAME="net/%k"
KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
KERNEL=="pktcdvd", NAME="pktcdvd/control"
KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
KERNEL=="microcode", NAME="cpu/microcode"
KERNEL=="umad*", NAME="infiniband/%k"
KERNEL=="issm*", NAME="infiniband/%k"
KERNEL=="uverbs*", NAME="infiniband/%k"
KERNEL=="ucm", NAME="infiniband/%k"
KERNEL=="buzzer", NAME="misc/buzzer"
# ALSA devices
KERNEL=="controlC[0-9]*", NAME="snd/%k"
KERNEL=="hwC[D0-9]*", NAME="snd/%k"
KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k"
KERNEL=="midiC[D0-9]*", NAME="snd/%k"
KERNEL=="timer", NAME="snd/%k"
KERNEL=="seq", NAME="snd/%k"
# ieee1394 devices
KERNEL=="dv1394*", NAME="dv1394/%n"
KERNEL=="video1394*", NAME="video1394/%n"
# input devices
KERNEL=="mice", NAME="input/%k"
KERNEL=="mouse[0-9]*", NAME="input/%k"
KERNEL=="event[0-9]*", NAME="input/%k"
KERNEL=="js[0-9]*", NAME="input/%k"
KERNEL=="ts[0-9]*", NAME="input/%k"
KERNEL=="uinput", NAME="input/%k"
# Zaptel
KERNEL=="zapctl", NAME="zap/ctl"
KERNEL=="zaptimer", NAME="zap/timer"
KERNEL=="zapchannel", NAME="zap/channel"
KERNEL=="zappseudo", NAME="zap/pseudo"
KERNEL=="zap[0-9]*", NAME="zap/%n"
# AOE character devices
SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k"
SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k"
SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k"
# device mapper creates its own device nodes, so ignore these
KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
KERNEL=="device-mapper", NAME="mapper/control"
KERNEL="rfcomm[0-9]*", NAME="%k", GROUP="users", MODE="0660"
# Firmware Helper
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/firmware_helper"

View File

@@ -1,35 +0,0 @@
#! /bin/sh
#
# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
#
# Filename: udev_network_queue.sh
# Date: 03-May-06
do_start() {
if test -e /dev/udev_network_queue
then
echo "Activating queued NICs..."
for NIC in `cat /dev/udev_network_queue`
do
export INTERFACE="$NIC" ; export ACTION=add
/etc/udev/scripts/network.sh
done
echo ""
else
echo "No NICs queued"
fi
}
do_stop() {
/bin/true
}
case "$1" in
start) do_start;;
stop) do_stop;;
restart) do_stop
do_start;;
*) echo "Usage: `basename $0` [ start | stop | restart ]"
exit 0;;
esac

View File

@@ -1,778 +0,0 @@
Upstream-Status: Inappropriate [distribution]
--- udev-081/udevsynthesize.c.orig 2006-01-29 12:22:45.000000000 +0100
+++ udev-081/udevsynthesize.c 2006-01-29 12:22:40.000000000 +0100
@@ -0,0 +1,763 @@
+/*
+ * udevcoldplug.c
+ *
+ * Copyright (C) 2005 SUSE Linux Products GmbH
+ *
+ * Author:
+ * Kay Sievers <kay.sievers@vrfy.org>
+ *
+ * Synthesize kernel events from sysfs information and pass them
+ * to the udevd daemon.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <signal.h>
+#include <syslog.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "udev_libc_wrapper.h"
+#include "udev.h"
+#include "udevd.h"
+#include "udev_version.h"
+#include "logging.h"
+
+#include "list.h"
+
+#ifndef DT_DIR
+#define DT_DIR 4
+#endif
+
+static const char *udev_log_str;
+static int udevd_sock = -1;
+
+#ifdef USE_LOG
+void log_message(int priority, const char *format, ...)
+{
+ va_list args;
+
+ if (priority > udev_log_priority)
+ return;
+
+ va_start(args, format);
+ vsyslog(priority, format, args);
+ va_end(args);
+}
+#endif
+
+struct device {
+ struct list_head node;
+ struct udevd_msg msg;
+ size_t bufpos;
+ char *path;
+};
+
+static dev_t read_devt(const char *path)
+{
+ char filename[PATH_SIZE];
+ char majorminor[64];
+ unsigned int major, minor;
+ ssize_t count;
+ int fd;
+
+ snprintf(filename, sizeof(filename), "%s/%s", path, "dev");
+ filename[sizeof(filename)-1] = '\0';
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ return 0;
+
+ count = read(fd, majorminor, sizeof(majorminor));
+ close(fd);
+ majorminor[count] = '\0';
+ if (sscanf(majorminor, "%u:%u", &major, &minor) != 2)
+ return 0;
+ dbg("found major=%d, minor=%d", major, minor);
+
+ return makedev(major, minor);
+}
+
+static ssize_t read_file(const char *directory, const char *file, char *str, size_t len)
+{
+ char filename[PATH_SIZE];
+ ssize_t count;
+ int fd;
+
+ memset(filename, 0, sizeof(filename));
+ snprintf(filename, sizeof(filename), "%s/%s", directory, file);
+ filename[sizeof(filename)-1] = '\0';
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ return -1;
+
+ count = read(fd, str, len-1);
+ close(fd);
+
+ if (count > (ssize_t)len)
+ count = len;
+ str[count-1] = '\0';
+
+ return count;
+}
+
+static ssize_t read_link(const char *directory, const char *file, char *str, size_t size)
+{
+ char filename[PATH_SIZE];
+ char target[PATH_SIZE];
+ int len;
+ char *back;
+ char *strip;
+ int level = 1;
+
+ snprintf(filename, sizeof(filename), "%s/%s", directory, file);
+ filename[sizeof(filename)-1] = '\0';
+
+ len = readlink(filename, target, sizeof(target)-1);
+ if (len < 0)
+ return -1;
+ target[len] = '\0';
+
+ back = target;
+ while (strncmp(back, "../", 3) == 0) {
+ back += 3;
+ level++;
+ }
+ while(level--) {
+ strip = strrchr(filename, '/');
+ if (!strip)
+ return -1;
+ strip[0] = '\0';
+ }
+
+ snprintf(str, size, "%s/%s", filename, back);
+ str[size-1] = '\0';
+
+ return len;
+}
+
+static char *add_env_key(struct device *device, const char *key, const char *value)
+{
+ size_t pos = device->bufpos;
+ device->bufpos += sprintf(&device->msg.envbuf[device->bufpos], "%s=%s", key, value)+1;
+ return &device->msg.envbuf[pos];
+}
+
+static struct device *device_create(const char *path, const char *subsystem, dev_t devt)
+{
+ struct device *device;
+ const char *devpath = &path[strlen(sysfs_path)];
+ char target[PATH_SIZE];
+
+ device = malloc(sizeof(struct device));
+ if (device == NULL) {
+ dbg("error malloc");
+ return NULL;
+ }
+ memset(device, 0x00, sizeof(struct device));
+
+ device->path = add_env_key(device, "DEVPATH", devpath);
+ device->path += strlen("DEVPATH=");
+ add_env_key(device, "SUBSYSTEM", subsystem);
+ add_env_key(device, "ACTION", "add");
+ add_env_key(device, "UDEV_COLDPLUG", "1");
+
+ if (major(devt)) {
+ char number[32];
+ sprintf(number, "%u", major(devt));
+ add_env_key(device, "MAJOR", number);
+ sprintf(number, "%u", minor(devt));
+ add_env_key(device, "MINOR", number);
+ }
+
+ if (strncmp(devpath, "/block/", strlen("/block/")) == 0 ||
+ strncmp(devpath, "/class/", strlen("/class/")) == 0) {
+ char physpath[PATH_SIZE];
+
+ if (read_link(path, "device", physpath, sizeof(physpath)) > (ssize_t)strlen(sysfs_path)) {
+ add_env_key(device, "PHYSDEVPATH", &physpath[strlen(sysfs_path)]);
+ if (read_link(physpath, "driver", target, sizeof(target)) > (ssize_t)strlen(sysfs_path)) {
+ char *pos = strrchr(target, '/');
+ if (pos)
+ add_env_key(device, "PHYSDEVDRIVER", &pos[1]);
+ }
+ if (read_link(physpath, "bus", target, sizeof(target)) > (ssize_t)strlen(sysfs_path)) {
+ char *pos = strrchr(target, '/');
+ if (pos)
+ add_env_key(device, "PHYSDEVBUS", &pos[1]);
+ }
+ }
+ } else if (strncmp(devpath, "/devices/", strlen("/devices/")) == 0) {
+ if (read_link(path, "driver", target, sizeof(target)) > (ssize_t)strlen(sysfs_path)) {
+ char *pos = strrchr(target, '/');
+ if (pos)
+ add_env_key(device, "PHYSDEVDRIVER", &pos[1]);
+ }
+ if (read_link(path, "bus", target, sizeof(target)) > (ssize_t)strlen(sysfs_path)) {
+ char *pos = strrchr(target, '/');
+ if (pos)
+ add_env_key(device, "PHYSDEVBUS", &pos[1]);
+ }
+ }
+
+ return device;
+}
+
+static int device_list_insert(struct list_head *device_list, struct device *device)
+{
+ struct device *loop_device;
+
+ dbg("insert: '%s'", device->path);
+
+ /* sort files in lexical order */
+ list_for_each_entry(loop_device, device_list, node)
+ if (strcmp(loop_device->path, device->path) > 0)
+ break;
+
+ list_add_tail(&device->node, &loop_device->node);
+
+ return 0;
+}
+
+static int add_device_udevd(struct device *device)
+{
+ size_t msg_len;
+ struct sockaddr_un saddr;
+ socklen_t addrlen;
+ int retval;
+
+ memset(&saddr, 0x00, sizeof(struct sockaddr_un));
+ saddr.sun_family = AF_LOCAL;
+ /* use abstract namespace for socket path */
+ strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
+ addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
+
+ strcpy(device->msg.magic, UDEV_MAGIC);
+ device->msg.type = UDEVD_UEVENT_UDEVSEND;
+
+ msg_len = offsetof(struct udevd_msg, envbuf) + device->bufpos;
+ dbg("msg_len=%i", msg_len);
+
+ retval = sendto(udevd_sock, &device->msg, msg_len, 0, (struct sockaddr *)&saddr, addrlen);
+ if (retval < 0)
+ return -1;
+
+ return 0;
+}
+
+static void exec_list(struct list_head *device_list, const char *first[], const char *last[])
+{
+ struct device *loop_device;
+ struct device *tmp_device;
+ int i;
+
+ /* handle the "first" type devices first */
+ if (first)
+ list_for_each_entry_safe(loop_device, tmp_device, device_list, node) {
+ for (i = 0; first[i] != NULL; i++) {
+ if (strncmp(loop_device->path, first[i], strlen(first[i])) == 0) {
+ add_device_udevd(loop_device);
+ list_del(&loop_device->node);
+ free(loop_device);
+ break;
+ }
+ }
+ }
+
+ /* handle the devices we are allowed to, excluding the "last" type devices */
+ if (last)
+ list_for_each_entry_safe(loop_device, tmp_device, device_list, node) {
+ int found = 0;
+ for (i = 0; last[i] != NULL; i++) {
+ if (strncmp(loop_device->path, last[i], strlen(last[i])) == 0) {
+ found = 1;
+ break;
+ }
+ }
+ if (found)
+ continue;
+
+ add_device_udevd(loop_device);
+ list_del(&loop_device->node);
+ free(loop_device);
+ }
+
+ /* handle the rest of the devices */
+ list_for_each_entry_safe(loop_device, tmp_device, device_list, node) {
+ add_device_udevd(loop_device);
+ list_del(&loop_device->node);
+ free(loop_device);
+ }
+}
+
+static int udev_scan_class(void)
+{
+ char base[PATH_SIZE];
+ DIR *dir;
+ struct dirent *dent;
+ LIST_HEAD(device_list);
+
+ /* we want /dev/null and /dev/console first */
+ const char *first[] = {
+ "/class/mem",
+ "/class/tty",
+ NULL,
+ };
+
+ snprintf(base, sizeof(base), "%s/class", sysfs_path);
+ base[sizeof(base)-1] = '\0';
+
+ dir = opendir(base);
+ if (!dir)
+ return -1;
+
+ for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
+ char dirname[PATH_SIZE];
+ DIR *dir2;
+ struct dirent *dent2;
+
+ if (dent->d_name[0] == '.')
+ continue;
+
+ snprintf(dirname, sizeof(dirname), "%s/%s", base, dent->d_name);
+ dirname[sizeof(dirname)-1] = '\0';
+
+ dir2 = opendir(dirname);
+ if (!dir2)
+ continue;
+ for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
+ char dirname2[PATH_SIZE];
+ struct device *device;
+ dev_t devt;
+
+ if (dent2->d_name[0] == '.')
+ continue;
+ if (dent2->d_type != DT_DIR)
+ continue;
+
+ snprintf(dirname2, sizeof(dirname2), "%s/%s", dirname, dent2->d_name);
+ dirname2[sizeof(dirname2)-1] = '\0';
+ devt = read_devt(dirname2);
+ device = device_create(dirname2, dent->d_name, devt);
+
+ if (strcmp(dent->d_name, "net") == 0 ||
+ strcmp(dent->d_name, "bluetooth") == 0) {
+ add_env_key(device, "INTERFACE", dent2->d_name);
+ } else if (strcmp(dent->d_name, "pcmcia_socket") == 0 &&
+ strlen(dent->d_name) > 14) {
+ add_env_key(device, "SOCKET_NO",
+ dent2->d_name + 14);
+ }
+
+ device_list_insert(&device_list, device);
+ }
+ closedir(dir2);
+ }
+ closedir(dir);
+ exec_list(&device_list, first, NULL);
+
+ return 0;
+}
+
+static int udev_scan_block(void)
+{
+ char base[PATH_SIZE];
+ DIR *dir;
+ struct dirent *dent;
+ LIST_HEAD(device_list);
+
+ /* dm wants to have the block devices around before it */
+ const char *last[] = {
+ "/block/dm",
+ NULL,
+ };
+
+ snprintf(base, sizeof(base), "%s/block", sysfs_path);
+ base[sizeof(base)-1] = '\0';
+
+ dir = opendir(base);
+ if (!dir)
+ return -1;
+
+ for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
+ char dirname[PATH_SIZE];
+ struct device *device;
+ struct dirent *dent2;
+ DIR *dir2;
+ dev_t devt;
+
+ if (dent->d_name[0] == '.')
+ continue;
+ if (dent->d_type != DT_DIR)
+ continue;
+
+ snprintf(dirname, sizeof(dirname), "%s/%s", base, dent->d_name);
+ dirname[sizeof(dirname)-1] = '\0';
+ devt = read_devt(dirname);
+ if (major(devt)) {
+ device = device_create(dirname, "block", devt);
+ device_list_insert(&device_list, device);
+ }
+
+ /* look for partitions */
+ dir2 = opendir(dirname);
+ if (!dir2)
+ continue;
+ for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
+ char dirname2[PATH_SIZE];
+
+ if (dent2->d_name[0] == '.')
+ continue;
+ if (dent2->d_type != DT_DIR)
+ continue;
+
+ snprintf(dirname2, sizeof(dirname2), "%s/%s", dirname, dent2->d_name);
+ dirname2[sizeof(dirname2)-1] = '\0';
+ devt = read_devt(dirname2);
+ if (major(devt)) {
+ device = device_create(dirname2, "block", devt);
+ device_list_insert(&device_list, device);
+ continue;
+ }
+ }
+ closedir(dir2);
+ }
+ closedir(dir);
+ exec_list(&device_list, NULL, last);
+
+ return 0;
+}
+
+static int pci_handler(struct device *device)
+{
+ char path[PATH_SIZE];
+ char value[PATH_SIZE];
+ char vendor[PATH_SIZE];
+ char product[PATH_SIZE];
+ const char *name;
+
+ snprintf(path, sizeof(path), "%s%s", sysfs_path, device->path);
+ path[sizeof(path)-1] = '\0';
+
+ if (read_file(path, "modalias", value, sizeof(value)) > 0)
+ add_env_key(device, "MODALIAS", value);
+
+ name = strrchr(device->path, '/');
+ if (name)
+ add_env_key(device, "PCI_SLOT_NAME", &name[1]);
+
+ if (read_file(path, "class", value, sizeof(value)) > 0)
+ add_env_key(device, "PCI_CLASS", &value[2]);
+
+ if (read_file(path, "vendor", vendor, sizeof(vendor)) > 0 &&
+ read_file(path, "device", product, sizeof(product)) > 0) {
+ snprintf(value, sizeof(value), "%s:%s", &vendor[2], &product[2]);
+ path[sizeof(value)-1] = '\0';
+ add_env_key(device, "PCI_ID", value);
+ }
+
+ if (read_file(path, "subsystem_vendor", vendor, sizeof(vendor)) > 0 &&
+ read_file(path, "subsystem_device", product, sizeof(product)) > 0) {
+ snprintf(value, sizeof(value), "%s:%s", &vendor[2], &product[2]);
+ path[sizeof(value)-1] = '\0';
+ add_env_key(device, "PCI_SUBSYS_ID", value);
+ }
+
+ return 0;
+}
+
+static int usb_handler(struct device *device)
+{
+ char path[PATH_SIZE];
+ char value[PATH_SIZE];
+ char str1[PATH_SIZE];
+ char str2[PATH_SIZE];
+ char str3[PATH_SIZE];
+ unsigned int int1;
+ unsigned int int2;
+ unsigned int int3;
+ char *pos;
+
+ snprintf(path, sizeof(path), "%s%s", sysfs_path, device->path);
+ path[sizeof(path)-1] = '\0';
+
+ /* device events have : in their directory name */
+ pos = strrchr(path, '/');
+ if (!strchr(pos, ':'))
+ return 0; /* and do not have other variables */
+
+ if (read_file(path, "modalias", value, sizeof(value)) > 0)
+ add_env_key(device, "MODALIAS", value);
+
+ if (read_file(path, "bInterfaceClass", str1, sizeof(str1)) > 0 &&
+ read_file(path, "bInterfaceSubClass", str2, sizeof(str2)) > 0 &&
+ read_file(path, "bInterfaceProtocol", str3, sizeof(str3)) > 0) {
+ int1 = (int) strtol(str1, NULL, 16);
+ int2 = (int) strtol(str2, NULL, 16);
+ int3 = (int) strtol(str3, NULL, 16);
+ snprintf(value, sizeof(value), "%u/%u/%u", int1, int2, int3);
+ path[sizeof(value)-1] = '\0';
+ add_env_key(device, "INTERFACE", value);
+ }
+
+ /* move to the parent directory */
+ pos[0] = '\0';
+
+ if (read_file(path, "idVendor", str1, sizeof(str1)) > 0 &&
+ read_file(path, "idProduct", str2, sizeof(str2)) > 0 &&
+ read_file(path, "bcdDevice", str3, sizeof(str3)) > 0) {
+ int1 = (int) strtol(str1, NULL, 16);
+ int2 = (int) strtol(str2, NULL, 16);
+ int3 = (int) strtol(str3, NULL, 16);
+ snprintf(value, sizeof(value), "%x/%x/%x", int1, int2, int3);
+ path[sizeof(value)-1] = '\0';
+ add_env_key(device, "PRODUCT", value);
+ }
+
+ if (read_file(path, "bDeviceClass", str1, sizeof(str1)) > 0 &&
+ read_file(path, "bDeviceSubClass", str2, sizeof(str2)) > 0 &&
+ read_file(path, "bDeviceProtocol", str3, sizeof(str3)) > 0) {
+ int1 = (int) strtol(str1, NULL, 16);
+ int2 = (int) strtol(str2, NULL, 16);
+ int3 = (int) strtol(str3, NULL, 16);
+ snprintf(value, sizeof(value), "%u/%u/%u", int1, int2, int3);
+ path[sizeof(value)-1] = '\0';
+ add_env_key(device, "TYPE", value);
+ }
+
+ if (read_file(path, "devnum", str2, sizeof(str2)) > 0) {
+ pos = strrchr(path, 'b');
+ int1 = (int) strtol(pos + 1, NULL, 16);
+ int2 = (int) strtol(str2, NULL, 16);
+ snprintf(value, sizeof(value),
+ "/proc/bus/usb/%03d/%03d", int1, int2);
+ path[sizeof(value)-1] = '\0';
+ add_env_key(device, "DEVICE", value);
+ }
+
+ return 0;
+}
+
+static int serio_handler(struct device *device)
+{
+ char path[PATH_SIZE];
+ char value[PATH_SIZE];
+
+ snprintf(path, sizeof(path), "%s%s", sysfs_path, device->path);
+ path[sizeof(path)-1] = '\0';
+
+ if (read_file(path, "modalias", value, sizeof(value)) > 0)
+ add_env_key(device, "MODALIAS", value);
+
+ if (read_file(path, "id/type", value, sizeof(value)) > 0)
+ add_env_key(device, "SERIO_TYPE", value);
+
+ if (read_file(path, "id/proto", value, sizeof(value)) > 0)
+ add_env_key(device, "SERIO_PROTO", value);
+
+ if (read_file(path, "id/id", value, sizeof(value)) > 0)
+ add_env_key(device, "SERIO_ID", value);
+
+ if (read_file(path, "id/extra", value, sizeof(value)) > 0)
+ add_env_key(device, "SERIO_EXTRA", value);
+
+ return 0;
+}
+
+static int ccw_handler(struct device *device)
+{
+ char path[PATH_SIZE];
+ char value[PATH_SIZE], *tmp;
+
+ snprintf(path, sizeof(path), "%s%s", sysfs_path, device->path);
+ path[sizeof(path)-1] = '\0';
+
+ if (read_file(path, "modalias", value, sizeof(value)) > 0)
+ add_env_key(device, "MODALIAS", value);
+
+ if (read_file(path, "cutype", value, sizeof(value)) > 0) {
+ value[4] = 0;
+ tmp = &value[5];
+ add_env_key(device, "CU_TYPE", value);
+ add_env_key(device, "CU_MODEL", tmp);
+ }
+
+ if (read_file(path, "devtype", value, sizeof(value)) > 0) {
+ if (value[0] == 'n') {
+ add_env_key(device, "DEV_TYPE", "0000");
+ add_env_key(device, "DEV_MODEL", "00");
+ }
+ else {
+ value[4] = 0;
+ tmp = &value[5];
+ add_env_key(device, "DEV_TYPE", value);
+ add_env_key(device, "DEV_MODEL", tmp);
+ }
+ }
+
+ return 0;
+}
+
+static int modalias_handler(struct device *device)
+{
+ char path[PATH_SIZE];
+ char value[PATH_SIZE];
+
+ snprintf(path, sizeof(path), "%s%s", sysfs_path, device->path);
+ path[sizeof(path)-1] = '\0';
+
+ if (read_file(path, "modalias", value, sizeof(value)) > 0)
+ add_env_key(device, "MODALIAS", value);
+
+ return 0;
+}
+
+static int udev_scan_bus(const char *bus, int bus_handler(struct device *device))
+{
+ char base[PATH_SIZE];
+ DIR *dir;
+ struct dirent *dent;
+ LIST_HEAD(device_list);
+
+ snprintf(base, sizeof(base), "%s/bus/%s/devices", sysfs_path, bus);
+ base[sizeof(base)-1] = '\0';
+
+ dir = opendir(base);
+ if (!dir)
+ return -1;
+ for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
+ char devpath[PATH_SIZE];
+ struct device *device;
+
+ if (dent->d_name[0] == '.')
+ continue;
+
+ if (read_link(base, dent->d_name, devpath, sizeof(devpath)) < 0)
+ continue;
+
+ device = device_create(devpath, bus, makedev(0, 0));
+ if (bus_handler) {
+ if (bus_handler(device) < 0) {
+ dbg("'%s' bus handler skipped event", devpath);
+ free(device);
+ continue;
+ }
+ }
+
+ device_list_insert(&device_list, device);
+ }
+ closedir(dir);
+ exec_list(&device_list, NULL, NULL);
+
+ return 0;
+}
+
+static int udev_scan_devices(void)
+{
+ char base[PATH_SIZE];
+ DIR *dir;
+ struct dirent *dent;
+
+ snprintf(base, sizeof(base), "%s/bus", sysfs_path);
+ base[sizeof(base)-1] = '\0';
+
+ dir = opendir(base);
+ if (!dir)
+ return -1;
+
+ for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
+ if (dent->d_name[0] == '.')
+ continue;
+ if (dent->d_type != DT_DIR)
+ continue;
+
+ /* add bus specific env values */
+ if (strcmp(dent->d_name, "pci") == 0)
+ udev_scan_bus("pci", pci_handler);
+ else if (strcmp(dent->d_name, "usb") == 0)
+ udev_scan_bus("usb", usb_handler);
+ else if (strcmp(dent->d_name, "serio") == 0)
+ udev_scan_bus("serio", serio_handler);
+ else if (strcmp(dent->d_name, "ccw") == 0)
+ udev_scan_bus("ccw", ccw_handler);
+ else
+ udev_scan_bus(dent->d_name, modalias_handler);
+ }
+ closedir(dir);
+
+ return 0;
+}
+
+int main(int argc, char *argv[], char *envp[])
+{
+ LIST_HEAD(device_list);
+ int i;
+
+ logging_init("udevcoldplug");
+ udev_config_init(); sysfs_init();
+ dbg("version %s", UDEV_VERSION);
+
+ udev_log_str = getenv("UDEV_LOG");
+
+ /* disable all logging if not explicitely requested */
+ if (udev_log_str == NULL)
+ udev_log_priority = 0;
+
+ for (i = 1 ; i < argc; i++) {
+ char *arg = argv[i];
+
+ if (strcmp(arg, "help") == 0 || strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
+ printf("Usage: udevcoldplug \n"
+ " --help print this help text\n\n");
+ exit(0);
+ } else {
+ fprintf(stderr, "unknown option\n\n");
+ exit(1);
+ }
+ }
+
+ udevd_sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
+ if (udevd_sock < 0) {
+ err("error getting socket");
+ return 1;
+ }
+
+ /* create nodes for already available devices */
+ udev_scan_class();
+ udev_scan_block();
+
+ /* synthesize events for bus devices
+ * may load modules or configure the device */
+ udev_scan_devices();
+
+ if (udevd_sock >= 0)
+ close(udevd_sock);
+ logging_close();
+
+ return 0;
+}
--- udev-081/Makefile
+++ udev-081/Makefile
@@ -58,6 +58,7 @@ PROGRAMS = \
udevmonitor \
udevinfo \
udevtest \
+ udevsynthesize \
udevstart
HEADERS = \

View File

@@ -1,51 +0,0 @@
#!/bin/sh -e
load_input_modules() {
for module in mousedev evdev joydev; do
modprobe -q $module || true
done
}
if [ ! -e /sys/class/mem/null/uevent ]; then # <= 2.6.14
/lib/udev/udevsynthesize
load_input_modules
exit 0
fi
# replace $IFS with something which is not likely to appear in a sysfs path,
# because some buggy drivers have spaces in their names
oldifs="$IFS"
IFS="|"
for file in /sys/bus/*/devices/*/uevent /sys/class/*/*/uevent \
/sys/block/*/uevent /sys/block/*/*/uevent; do
case "$file" in
*/device/uevent) ;; # skip followed device symlinks
*/\*/*) ;;
*/class/mem/*) # for /dev/null
first="$first${IFS}$file" ;;
*/block/md[0-9]*)
last="$last${IFS}$file" ;;
*)
default="$default${IFS}$file" ;;
esac
done
for file in $first${IFS}$default${IFS}$last; do
[ "$file" ] || continue
echo 'add' > "$file" || true
done
IFS="$oldifs"
case "$(uname -r)" in
2.6.1[0-5]|2.6.1[0-5][!0-9]*) # <= 2.6.15
load_input_modules
;;
esac
exit 0

View File

@@ -1,50 +0,0 @@
Upstream-Status: Inappropriate [configuration]
Index: udev-145/configure.ac
===================================================================
--- udev-145.orig/configure.ac 2010-01-29 14:41:29.000000000 +0000
+++ udev-145/configure.ac 2010-01-29 14:41:54.000000000 +0000
@@ -49,16 +49,17 @@
AC_ARG_ENABLE([extras],
AS_HELP_STRING([--disable-extras], [disable extras with external dependencies]),
[], [enable_extras=yes])
+
+ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.7.0 gobject-2.0 >= 2.7.0])
+ AC_SUBST([GLIB_CFLAGS])
+ AC_SUBST([GLIB_LIBS])
+
if test "x$enable_extras" = xyes; then
AC_PATH_PROG([GPERF], [gperf])
if test -z "$GPERF"; then
AC_MSG_ERROR([gperf is needed])
fi
- PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.7.0 gobject-2.0 >= 2.7.0])
- AC_SUBST([GLIB_CFLAGS])
- AC_SUBST([GLIB_LIBS])
-
AC_CHECK_LIB([acl], [acl_init], [:], AC_MSG_ERROR([libacl not found]))
AC_CHECK_HEADER([acl/libacl.h], [:], AC_MSG_ERROR([libacl header not found]))
Index: udev-145/extras/Makefile.am
===================================================================
--- udev-145.orig/extras/Makefile.am 2010-01-29 14:43:56.000000000 +0000
+++ udev-145/extras/Makefile.am 2010-01-29 14:44:11.000000000 +0000
@@ -12,7 +12,8 @@
rule_generator \
scsi_id \
usb_id \
- v4l_id
+ v4l_id \
+ gudev
if ENABLE_EXTRAS
SUBDIRS += \
@@ -20,6 +21,5 @@
usb-db \
hid2hci \
keymap \
- modem-modeswitch \
- gudev
+ modem-modeswitch
endif

View File

@@ -1,59 +0,0 @@
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: udev
# Required-Start: mountvirtfs
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Start udevd, populate /dev and load drivers.
### END INIT INFO
export TZ=/etc/localtime
[ -d /sys/class ] || exit 1
[ -r /proc/mounts ] || exit 1
[ -x /sbin/udevd ] || exit 1
[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
kill_udevd() {
if [ -x /sbin/pidof ]; then
pid=`/sbin/pidof -x udevd`
[ -n "$pid" ] && kill $pid
fi
}
export ACTION=add
# propagate /dev from /sys
echo -n "Starting udev"
# mount the tmpfs on /dev, if not already done
LANG=C awk "\$2 == \"/dev\" && \$4 == \"tmpfs\" { exit 1 }" /proc/mounts && {
mount -n -o mode=0755 -t tmpfs none "/dev"
mkdir -m 0755 /dev/pts
mkdir -m 1777 /dev/shm
}
if [ -e /etc/dev.tar ]; then
(cd /; tar xf /etc/dev.tar)
not_first_boot=1
fi
# make_extra_nodes
kill_udevd > "/dev/null" 2>&1
# trigger the sorted events
echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
/sbin/udevd -d
/sbin/udevadm control --env=STARTUP=1
if [ "$not_first_boot" != "" ];then
/sbin/udevadm trigger --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux --subsystem-nomatch=platform
(/sbin/udevadm settle --timeout=3; /sbin/udevadm control --env=STARTUP=)&
else
/sbin/udevadm trigger
/sbin/udevadm settle
fi
echo
exit 0

View File

@@ -1,33 +0,0 @@
# 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"
# The first rtc device is symlinked to /dev/rtc
KERNEL=="rtc0", SYMLINK+="rtc"
# Try and modprobe for drivers for new hardware
ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
# Create a symlink to any touchscreen input device
# Need to use ../ so the eventX can find the parent inputX modalias which is a directory above
SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{../modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0"

View File

@@ -1,50 +0,0 @@
Upstream-Status: Inappropriate [legacy version]
Index: udev-141/udev/test-udev.c
===================================================================
--- udev-141.orig/udev/test-udev.c 2008-10-24 09:07:24.000000000 +0100
+++ udev-141/udev/test-udev.c 2009-04-14 15:34:01.000000000 +0100
@@ -30,7 +30,7 @@
#include "udev.h"
-static void asmlinkage sig_handler(int signum)
+static void sig_handler(int signum)
{
switch (signum) {
case SIGALRM:
Index: udev-141/udev/udevadm-monitor.c
===================================================================
--- udev-141.orig/udev/udevadm-monitor.c 2009-03-29 19:07:01.000000000 +0100
+++ udev-141/udev/udevadm-monitor.c 2009-04-14 15:34:01.000000000 +0100
@@ -35,7 +35,7 @@
static int udev_exit;
-static void asmlinkage sig_handler(int signum)
+static void sig_handler(int signum)
{
if (signum == SIGINT || signum == SIGTERM)
udev_exit = 1;
Index: udev-141/udev/udevd.c
===================================================================
--- udev-141.orig/udev/udevd.c 2009-03-29 19:07:01.000000000 +0100
+++ udev-141/udev/udevd.c 2009-04-14 15:34:56.000000000 +0100
@@ -172,7 +172,7 @@
udev_event_unref(event);
}
-static void asmlinkage event_sig_handler(int signum)
+static void event_sig_handler(int signum)
{
if (signum == SIGALRM)
exit(1);
@@ -583,7 +583,7 @@
return 0;
}
-static void asmlinkage sig_handler(int signum)
+static void sig_handler(int signum)
{
switch (signum) {
case SIGINT:

View File

@@ -1,131 +0,0 @@
ACTION!="add", GOTO="permissions_end"
# workarounds needed to synchronize with sysfs
# only needed for kernels < v2.6.18-rc1
ENV{PHYSDEVPATH}!="?*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus"
SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
# only needed for kernels < 2.6.16
SUBSYSTEM=="net", WAIT_FOR_SYSFS="address"
# only needed for kernels < 2.6.17
SUBSYSTEM=="net", ENV{DRIVER}=="?*", WAIT_FOR_SYSFS="device/driver"
# devices needed to load the drivers providing them
KERNEL=="tun", OPTIONS+="ignore_remove"
KERNEL=="ppp", OPTIONS+="ignore_remove"
KERNEL=="loop[0-9]*", OPTIONS+="ignore_remove"
# default permissions for block devices
SUBSYSTEM=="block", GROUP="disk"
# the aacraid driver is broken and reports that disks removable (see #404927)
SUBSYSTEM=="block", ATTRS{removable}=="1", \
DRIVERS!="aacraid", GROUP="floppy"
# all block devices on these buses are "removable"
SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="floppy"
# IDE devices
KERNEL=="hd[a-z]|pcd[0-9]*", DRIVERS=="ide-cdrom|pcd", \
IMPORT{program}="cdrom_id --export $tempnode"
ENV{ID_CDROM}=="?*", GROUP="cdrom"
KERNEL=="ht[0-9]*", GROUP="tape"
KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
SUBSYSTEMS=="scsi", ATTRS{type}=="1", GROUP="tape"
SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="HP", GROUP="scanner"
SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="Epson", GROUP="scanner"
SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="EPSON", GROUP="scanner"
SUBSYSTEMS=="scsi", ATTRS{type}=="4", GROUP="cdrom"
SUBSYSTEMS=="scsi", ATTRS{type}=="5", GROUP="cdrom"
SUBSYSTEMS=="scsi", ATTRS{type}=="6", GROUP="scanner"
SUBSYSTEMS=="scsi", ATTRS{type}=="8", GROUP="tape"
# USB devices
KERNEL=="legousbtower*", MODE="0666"
KERNEL=="lp[0-9]*", SUBSYSTEMS=="usb", GROUP="lp"
# usbfs-like devices
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
MODE="0664"
# iRiver music players
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="plugdev", \
ATTRS{idVendor}=="4102", ATTRS{idProduct}=="10[01][135789]"
# serial devices
SUBSYSTEM=="tty", GROUP="dialout"
SUBSYSTEM=="capi", GROUP="dialout"
SUBSYSTEM=="slamr", GROUP="dialout"
SUBSYSTEM=="zaptel", 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="0666"
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=="nvram", GROUP="nvram"
KERNEL=="rtc|rtc[0-9]*", GROUP="audio"
KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
KERNEL=="fuse", GROUP="fuse"
KERNEL=="kqemu", MODE="0666"
KERNEL=="kvm", GROUP="kvm"
KERNEL=="tun", MODE="0666",
KERNEL=="cdemu[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd", MODE="0644"
KERNEL=="uverbs*", GROUP="rdma"
KERNEL=="ucm*", GROUP="rdma"
KERNEL=="rdma_ucm", GROUP="rdma"
# printers and parallel devices
SUBSYSTEM=="printer", GROUP="lp"
SUBSYSTEM=="ppdev", GROUP="lp"
KERNEL=="irlpt*", 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]*", ATTRS{name}=="*dvb*|*DVB*|* IR *" \
MODE="0664", GROUP="video"
KERNEL=="js[0-9]*", MODE="0664"
KERNEL=="lirc[0-9]*", GROUP="video"
# AOE character devices
SUBSYSTEM=="aoe", MODE="0220", GROUP="disk"
SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
LABEL="permissions_end"

View File

@@ -1,14 +0,0 @@
# debugging monitor
RUN+="socket:/org/kernel/udev/monitor"
# run a command on remove events
ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
# ignore the events generated by virtual consoles
KERNEL=="ptmx", OPTIONS+="last_rule"
KERNEL=="console", OPTIONS+="last_rule"
KERNEL=="tty" , OPTIONS+="last_rule"
KERNEL=="tty[0-9]*", OPTIONS+="last_rule"
KERNEL=="pty*", OPTIONS+="last_rule"
SUBSYSTEM=="vc", OPTIONS+="last_rule"

View File

@@ -1,116 +0,0 @@
# 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
#
# workaround for devices which do not report media changes
SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", \
ENV{ID_MODEL}=="IOMEGA_ZIP*", NAME="%k", OPTIONS+="all_partitions"
SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTRS{media}=="floppy", \
OPTIONS+="all_partitions"
# SCSI devices
SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"
# USB devices
SUBSYSTEMS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k"
SUBSYSTEMS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k"
SUBSYSTEMS=="usb", KERNEL=="dabusb*", NAME="usb/%k"
SUBSYSTEMS=="usb", KERNEL=="hiddev*", NAME="usb/%k"
SUBSYSTEMS=="usb", KERNEL=="legousbtower*", NAME="usb/%k"
SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
ATTRS{product}=="Palm Handheld*|Handspring Visor|palmOne Handheld", \
SYMLINK+="pilot"
# usbfs-like devices
SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", ACTION=="add", \
NAME="%c"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}"
# serial devices
KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
KERNEL=="capi[0-9]*", NAME="capi/%n"
# video devices
KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", ACTION=="add", \
NAME="%c"
KERNEL=="card[0-9]*", NAME="dri/%k"
# misc devices
KERNEL=="hw_random", NAME="hwrng"
KERNEL=="tun", NAME="net/%k"
KERNEL=="evtchn", NAME="xen/%k"
KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
KERNEL=="pktcdvd", NAME="pktcdvd/control"
KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
KERNEL=="microcode", NAME="cpu/microcode"
KERNEL=="umad*", NAME="infiniband/%k"
KERNEL=="issm*", NAME="infiniband/%k"
KERNEL=="uverbs*", NAME="infiniband/%k"
KERNEL=="ucm*", NAME="infiniband/%k"
KERNEL=="rdma_ucm", NAME="infiniband/%k"
# ALSA devices
KERNEL=="controlC[0-9]*", NAME="snd/%k"
KERNEL=="hwC[D0-9]*", NAME="snd/%k"
KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k"
KERNEL=="midiC[D0-9]*", NAME="snd/%k"
KERNEL=="timer", NAME="snd/%k"
KERNEL=="seq", NAME="snd/%k"
# ieee1394 devices
KERNEL=="dv1394*", NAME="dv1394/%n"
KERNEL=="video1394*", NAME="video1394/%n"
# input devices
KERNEL=="mice", NAME="input/%k"
KERNEL=="mouse[0-9]*", NAME="input/%k"
KERNEL=="event[0-9]*", NAME="input/%k"
KERNEL=="js[0-9]*", NAME="input/%k"
KERNEL=="ts[0-9]*", NAME="input/%k"
KERNEL=="uinput", NAME="input/%k"
# Zaptel
KERNEL=="zapctl", NAME="zap/ctl"
KERNEL=="zaptimer", NAME="zap/timer"
KERNEL=="zapchannel", NAME="zap/channel"
KERNEL=="zappseudo", NAME="zap/pseudo"
KERNEL=="zap[0-9]*", NAME="zap/%n"
# AOE character devices
SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k"
SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k"
SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k"
SUBSYSTEM=="aoe", KERNEL=="revalidate", NAME="etherd/%k"
# device mapper creates its own device nodes, so ignore these
KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
KERNEL=="device-mapper", NAME="mapper/control"
KERNEL=="rfcomm[0-9]*", NAME="%k", GROUP="users", MODE="0660"
# Firmware Helper
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware.sh"
# Samsung UARTS
KERNEL=="s3c2410_serial[0-9]", NAME="ttySAC%n"
# MXC UARTs
KERNEL=="ttymxc[0-4]", NAME="ttymxc%n"

View File

@@ -1,26 +0,0 @@
Upstream-Status: Inappropriate [legacy version]
Index: udev-141/extras/volume_id/lib/Makefile.am
===================================================================
--- udev-141.orig/extras/volume_id/lib/Makefile.am 2009-05-17 23:36:16.000000000 +0100
+++ udev-141/extras/volume_id/lib/Makefile.am 2009-05-17 23:36:26.000000000 +0100
@@ -54,19 +54,6 @@
-version-info $(VOLID_LT_CURRENT):$(VOLID_LT_REVISION):$(VOLID_LT_AGE) \
-export-symbols $(top_srcdir)/extras/volume_id/lib/exported_symbols
-# move devel files to $(prefix)$(libdir_name) if needed
-install-data-hook:
- rm $(DESTDIR)$(rootlibdir)/libvolume_id.la
- if test "$(prefix)" != "$(exec_prefix)"; then \
- mkdir -p $(DESTDIR)$(prefix)/$(libdir_name); \
- mv $(DESTDIR)$(rootlibdir)/libvolume_id.a $(DESTDIR)$(prefix)/$(libdir_name)/; \
- so_img_name=$$(readlink $(DESTDIR)$(rootlibdir)/libvolume_id.so); \
- rm $(DESTDIR)$(rootlibdir)/libvolume_id.so; \
- so_img_rel_target_prefix=$$(echo $(prefix)/$(libdir_name) | sed 's,\(^/\|\)[^/][^/]*,..,g'); \
- ln -sf $$so_img_rel_target_prefix$(exec_prefix)/$(libdir_name)/$$so_img_name \
- $(DESTDIR)$(prefix)/$(libdir_name)/libvolume_id.so; \
- fi
-
EXTRA_DIST = \
exported_symbols

View File

@@ -1,72 +0,0 @@
SUMMARY = "/dev/ and hotplug management daemon"
DESCRIPTION = "udev is a program which dynamically creates and removes device nodes from \
/dev/. It responds to /sbin/hotplug device events and requires a 2.6 kernel."
LICENSE = "GPLv2.0+ & LGPLv2.1+"
SRC_URI += " \
file://udev.rules \
file://devfs-udev.rules \
file://links.conf \
file://permissions.rules \
file://mount.sh \
file://network.sh \
file://local.rules \
file://udev-cache \
file://init"
UDEV_DEVFS_RULES ?= "0"
PACKAGES =+ "udev-utils libvolume-id udev-cache"
FILES_udev-utils = "${usrbindir}/udevinfo ${usrbindir}/udevtest"
FILES_libvolume-id = "${base_libdir}/libvolume_id.so.*"
FILES_udev-cache = "${sysconfdir}/init.d/udev-cache"
RRECOMMENDS_${PN} += "udev-extraconf udev-cache"
inherit update-rc.d autotools pkgconfig
INITSCRIPT_PACKAGES = "udev udev-cache"
INITSCRIPT_NAME_udev = "udev"
INITSCRIPT_PARAMS_udev = "start 04 S ."
INITSCRIPT_NAME_udev-cache = "udev-cache"
INITSCRIPT_PARAMS_udev-cache = "start 36 S ."
export CROSS = "${TARGET_PREFIX}"
export HOSTCC = "${BUILD_CC}"
export udevdir ?= "/dev"
export usrbindir := "${bindir}"
export usrsbindir := "${sbindir}"
export etcdir = "${sysconfdir}"
LD = "${CC}"
bindir = "/bin"
sbindir = "/sbin"
UDEV_EXTRAS = "<override me>"
FILES_${PN} += "${usrbindir}/* ${usrsbindir}/*"
FILES_${PN}-dbg += "${usrbindir}/.debug ${usrsbindir}/.debug"
EXTRA_OEMAKE = "-e \
'EXTRAS=${UDEV_EXTRAS}' \
'STRIP=echo'"
do_install () {
install -d ${D}${usrsbindir} \
${D}${sbindir}
oe_runmake 'DESTDIR=${D}' INSTALL=install install
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
install -m 0755 ${WORKDIR}/udev-cache ${D}${sysconfdir}/init.d/udev-cache
install -d ${D}${sysconfdir}/udev/rules.d/
install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
install -m 0644 ${WORKDIR}/permissions.rules ${D}${sysconfdir}/udev/rules.d/permissions.rules
install -m 0644 ${WORKDIR}/udev.rules ${D}${sysconfdir}/udev/rules.d/udev.rules
if [ "${UDEV_DEVFS_RULES}" = "1" ]; then
install -m 0644 ${WORKDIR}/devfs-udev.rules ${D}${sysconfdir}/udev/rules.d/devfs-udev.rules
fi
install -d ${D}${sysconfdir}/udev/scripts/
install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
}

View File

@@ -1,55 +0,0 @@
RPROVIDES_${PN} = "hotplug"
PR = "r11"
SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://enable-gudev.patch \
file://run.rules \
"
require udev.inc
INITSCRIPT_PARAMS = "start 03 S ."
FILES_${PN} += "${base_libdir}/udev/*"
FILES_${PN}-dbg += "${base_libdir}/udev/.debug"
UDEV_EXTRAS = "extras/firmware/ extras/scsi_id/ extras/volume_id/"
EXTRA_OECONF = "--with-udev-prefix= --disable-extras --disable-introspection"
DEPENDS += "glib-2.0"
do_install () {
install -d ${D}${usrsbindir} \
${D}${sbindir}
oe_runmake 'DESTDIR=${D}' INSTALL=install install
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
install -m 0755 ${WORKDIR}/udev-cache ${D}${sysconfdir}/init.d/udev-cache
install -d ${D}${sysconfdir}/udev/rules.d/
cp ${S}/rules/rules.d/* ${D}${sysconfdir}/udev/rules.d/
cp ${S}/rules/packages/* ${D}${sysconfdir}/udev/rules.d/
install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
#install -m 0644 ${WORKDIR}/permissions.rules ${D}${sysconfdir}/udev/rules.d/permissions.rules
#install -m 0644 ${WORKDIR}/run.rules ${D}${sysconfdir}/udev/rules.d/run.rules
#install -m 0644 ${WORKDIR}/udev.rules ${D}${sysconfdir}/udev/rules.d/udev.rules
#install -m 0644 ${WORKDIR}/links.conf ${D}${sysconfdir}/udev/links.conf
#if [ "${UDEV_DEVFS_RULES}" = "1" ]; then
# install -m 0644 ${WORKDIR}/devfs-udev.rules ${D}${sysconfdir}/udev/rules.d/devfs-udev.rules
#fi
# Remove some default rules that don't work well on embedded devices
#rm ${D}${sysconfdir}/udev/rules.d/60-persistent-input.rules
#rm ${D}${sysconfdir}/udev/rules.d/60-persistent-storage.rules
#rm ${D}${sysconfdir}/udev/rules.d/60-persistent-storage-tape.rules
install -d ${D}${sysconfdir}/udev/scripts/
install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
install -d ${D}${base_libdir}/udev/
}