summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2005-09-20 14:49:36 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2005-09-20 14:49:36 +0000
commiteb992319a0a412435289e60b5e666da07133d1f5 (patch)
tree1cee9b6e532cf1c859026c1b740ffb01c4b86285 /packages
parentc838ad939cd52d897390eefb9b578cd654b9e98d (diff)
udev: Rearrange the udev files into a more logical structure. Create copies of the rules we're using rather than the distributed version due to links to external scripts. Add mount.sh which attempts to mount block devices using pmount if available, falling back to mount if not. Fix the --mode switch to mknod in the init script.
Diffstat (limited to 'packages')
-rwxr-xr-xpackages/udev/files/init234
-rw-r--r--packages/udev/files/links.conf (renamed from packages/udev/udev-070/links.conf)0
-rw-r--r--packages/udev/files/local.rules3
-rw-r--r--packages/udev/files/mount.sh25
-rw-r--r--packages/udev/files/permissions.rules81
-rw-r--r--packages/udev/files/udev.rules (renamed from packages/udev/udev-070/udev.rules)2
-rw-r--r--packages/udev/udev-058/init178
-rw-r--r--packages/udev/udev-058/noasmlinkage.patch (renamed from packages/udev/files/noasmlinkage.patch)0
-rw-r--r--packages/udev/udev-063/init178
-rw-r--r--packages/udev/udev-065/init178
-rw-r--r--packages/udev/udev-070/fix-alignment.patch24
-rw-r--r--packages/udev/udev-070/init196
-rw-r--r--packages/udev/udev.inc20
-rw-r--r--packages/udev/udev_058.bb1
-rw-r--r--packages/udev/udev_063.bb3
-rw-r--r--packages/udev/udev_065.bb3
-rw-r--r--packages/udev/udev_070.bb12
17 files changed, 792 insertions, 346 deletions
diff --git a/packages/udev/files/init b/packages/udev/files/init
index 16efb31542..c290661c72 100755
--- a/packages/udev/files/init
+++ b/packages/udev/files/init
@@ -1,36 +1,18 @@
#!/bin/sh -e
-PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-
UDEVSTART=/sbin/udevstart
-# default maximum size of the /dev ramfs
-ramfs_size="1M"
+# defaults
+tmpfs_size="10M"
+udev_root="/dev"
[ -x $UDEVSTART ] || exit 0
. /etc/udev/udev.conf
-case "$(uname -r)" in
- 2.[012345].*)
- echo "udev requires a kernel >= 2.6, not started."
- exit 0
- ;;
-esac
-
-if ! grep -q '[[:space:]]ramfs$' /proc/filesystems; then
- echo "udev requires ramfs support, not started."
- exit 0
-fi
-
-if [ ! -e /proc/sys/kernel/hotplug ]; then
- echo "udev requires hotplug support, not started."
- exit 0
-fi
-
##############################################################################
-# we need to unmount /dev/pts/ and remount it later over the ramfs
+# 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/
@@ -41,132 +23,169 @@ unmount_devpts() {
fi
}
-# mount a ramfs over /dev, if somebody did not already do it
-mount_ramfs() {
- if grep -E -q "^[^[:space:]]+ /dev ramfs" /proc/mounts; then
+# 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 is used by /sbin/MAKEDEV to access the real /dev directory.
- # if you don't like this, remove /.dev/.
- [ -d /.dev ] && mount --bind /dev /.dev
+ # /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
- echo -n "Mounting a ramfs over /dev..."
- mount -n -o size=$ramfs_size,mode=0755 -t ramfs none /dev
- echo "done."
+ mkdir -p /dev/.static/dev
+ chmod 700 /dev/.static/
+ mount -n -o move /etc/udev /dev/.static/dev
}
# I hate this hack. -- Md
make_extra_nodes() {
- if [ -f /etc/udev/links.conf ]; then
+ [ -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 "unparseable line ($type $name $arg1)"
- ;;
+ 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
- fi
+}
+
+# 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 [ "$udev_root" != "/dev" ]; then
- echo "WARNING: udev_root != /dev"
+if ! supported_kernel; then
+ echo "udev requires a kernel >= 2.6.12, not started."
+ exit 1
+fi
-case "$1" in
- start)
- if [ -e "$udev_root/.udev.tdb" ]; then
- if mountpoint -q /dev/; then
- echo "FATAL: udev is already active on $udev_root."
- exit 1
- else
- echo "WARNING: .udev.tdb already exists on the old $udev_root!"
- fi
- fi
- mount -n -o size=$ramfs_size,mode=0755 -t ramfs none $udev_root
- echo -n "Creating initial device nodes..."
- $UDEVSTART
- echo "done."
- ;;
- stop)
- start-stop-daemon -K -x /sbin/udevd
- echo -n "Unmounting $udev_root..."
- # unmounting with -l should never fail
- if umount -l $udev_root; then
- echo "done."
- else
- echo "failed."
- fi
- ;;
- restart|force-reload)
- $0 stop
- $0 start
- ;;
- *)
- echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
- exit 1
- ;;
-esac
+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
- exit 0
-fi # udev_root != /dev/
+if [ ! -d /sys/class/ ]; then
+ echo "udev requires a mounted sysfs, not started."
+ exit 1
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; 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/.udev.tdb" ]; then
+ if [ -e "$udev_root/.udevdb" ]; then
if mountpoint -q /dev/; then
- echo "FATAL: udev is already active on $udev_root."
- exit 1
+ TMPFS_MOUNTED=1
else
- echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ echo ".udevdb already exists on the old $udev_root!"
fi
fi
- unmount_devpts
- mount_ramfs
- ACTION=add
- echo -n "Creating initial device nodes..."
- $UDEVSTART
+ warn_if_interactive
+
+ #echo /sbin/udevsend > /proc/sys/kernel/hotplug
+ echo "" > /proc/sys/kernel/hotplug
+ 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
- echo "done."
-# /etc/init.d/mountvirtfs start
;;
stop)
- start-stop-daemon -K -x /sbin/udevd
+ warn_if_interactive
+ start-stop-daemon --stop --exec /sbin/udevd --quiet
unmount_devpts
- echo -n "Unmounting /dev..."
+ 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
- echo "done."
- umount -l /.dev || true
-# /etc/init.d/mountvirtfs start
- else
- echo "failed."
+ if ! umount -l /dev; then
+ exit 1
fi
;;
restart|force-reload)
- start-stop-daemon -K -x /sbin/udevd
- echo -n "Recreating device nodes..."
- ACTION=add
- $UDEVSTART
+ start-stop-daemon --stop --exec /sbin/udevd --quiet
+ log_begin_msg "Recreating device nodes..."
+ udevstart
make_extra_nodes
- echo "done."
+ log_end_msg 0
;;
*)
echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
@@ -175,4 +194,3 @@ case "$1" in
esac
exit 0
-
diff --git a/packages/udev/udev-070/links.conf b/packages/udev/files/links.conf
index 8fff922db6..8fff922db6 100644
--- a/packages/udev/udev-070/links.conf
+++ b/packages/udev/files/links.conf
diff --git a/packages/udev/files/local.rules b/packages/udev/files/local.rules
new file mode 100644
index 0000000000..95b3e10830
--- /dev/null
+++ b/packages/udev/files/local.rules
@@ -0,0 +1,3 @@
+SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
+SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
+
diff --git a/packages/udev/files/mount.sh b/packages/udev/files/mount.sh
new file mode 100644
index 0000000000..7e641b08d7
--- /dev/null
+++ b/packages/udev/files/mount.sh
@@ -0,0 +1,25 @@
+#!/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"
+
+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
+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
+fi
diff --git a/packages/udev/files/permissions.rules b/packages/udev/files/permissions.rules
new file mode 100644
index 0000000000..86d771276b
--- /dev/null
+++ b/packages/udev/files/permissions.rules
@@ -0,0 +1,81 @@
+# 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"
+
diff --git a/packages/udev/udev-070/udev.rules b/packages/udev/files/udev.rules
index 9e45ed64c3..4fc82ba250 100644
--- a/packages/udev/udev-070/udev.rules
+++ b/packages/udev/files/udev.rules
@@ -93,4 +93,4 @@ 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" \ No newline at end of file
+ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/firmware_helper"
diff --git a/packages/udev/udev-058/init b/packages/udev/udev-058/init
new file mode 100644
index 0000000000..16efb31542
--- /dev/null
+++ b/packages/udev/udev-058/init
@@ -0,0 +1,178 @@
+#!/bin/sh -e
+
+PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+UDEVSTART=/sbin/udevstart
+
+# default maximum size of the /dev ramfs
+ramfs_size="1M"
+
+[ -x $UDEVSTART ] || exit 0
+
+. /etc/udev/udev.conf
+
+case "$(uname -r)" in
+ 2.[012345].*)
+ echo "udev requires a kernel >= 2.6, not started."
+ exit 0
+ ;;
+esac
+
+if ! grep -q '[[:space:]]ramfs$' /proc/filesystems; then
+ echo "udev requires ramfs support, not started."
+ exit 0
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "udev requires hotplug support, not started."
+ exit 0
+fi
+
+##############################################################################
+
+# we need to unmount /dev/pts/ and remount it later over the ramfs
+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 ramfs over /dev, if somebody did not already do it
+mount_ramfs() {
+ if grep -E -q "^[^[:space:]]+ /dev ramfs" /proc/mounts; then
+ return 0
+ fi
+
+ # /.dev is used by /sbin/MAKEDEV to access the real /dev directory.
+ # if you don't like this, remove /.dev/.
+ [ -d /.dev ] && mount --bind /dev /.dev
+
+ echo -n "Mounting a ramfs over /dev..."
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none /dev
+ echo "done."
+}
+
+# I hate this hack. -- Md
+make_extra_nodes() {
+ if [ -f /etc/udev/links.conf ]; then
+ 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 "unparseable line ($type $name $arg1)"
+ ;;
+ esac
+ done
+ fi
+}
+
+##############################################################################
+
+if [ "$udev_root" != "/dev" ]; then
+ echo "WARNING: udev_root != /dev"
+
+case "$1" in
+ start)
+ if [ -e "$udev_root/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none $udev_root
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ echo "done."
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Unmounting $udev_root..."
+ # unmounting with -l should never fail
+ if umount -l $udev_root; then
+ echo "done."
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+ exit 0
+fi # udev_root != /dev/
+
+##############################################################################
+# 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/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ unmount_devpts
+ mount_ramfs
+ ACTION=add
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+# /etc/init.d/mountvirtfs start
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ unmount_devpts
+ echo -n "Unmounting /dev..."
+ # unmounting with -l should never fail
+ if umount -l /dev; then
+ echo "done."
+ umount -l /.dev || true
+# /etc/init.d/mountvirtfs start
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Recreating device nodes..."
+ ACTION=add
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/packages/udev/files/noasmlinkage.patch b/packages/udev/udev-058/noasmlinkage.patch
index 1694d4d661..1694d4d661 100644
--- a/packages/udev/files/noasmlinkage.patch
+++ b/packages/udev/udev-058/noasmlinkage.patch
diff --git a/packages/udev/udev-063/init b/packages/udev/udev-063/init
new file mode 100644
index 0000000000..16efb31542
--- /dev/null
+++ b/packages/udev/udev-063/init
@@ -0,0 +1,178 @@
+#!/bin/sh -e
+
+PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+UDEVSTART=/sbin/udevstart
+
+# default maximum size of the /dev ramfs
+ramfs_size="1M"
+
+[ -x $UDEVSTART ] || exit 0
+
+. /etc/udev/udev.conf
+
+case "$(uname -r)" in
+ 2.[012345].*)
+ echo "udev requires a kernel >= 2.6, not started."
+ exit 0
+ ;;
+esac
+
+if ! grep -q '[[:space:]]ramfs$' /proc/filesystems; then
+ echo "udev requires ramfs support, not started."
+ exit 0
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "udev requires hotplug support, not started."
+ exit 0
+fi
+
+##############################################################################
+
+# we need to unmount /dev/pts/ and remount it later over the ramfs
+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 ramfs over /dev, if somebody did not already do it
+mount_ramfs() {
+ if grep -E -q "^[^[:space:]]+ /dev ramfs" /proc/mounts; then
+ return 0
+ fi
+
+ # /.dev is used by /sbin/MAKEDEV to access the real /dev directory.
+ # if you don't like this, remove /.dev/.
+ [ -d /.dev ] && mount --bind /dev /.dev
+
+ echo -n "Mounting a ramfs over /dev..."
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none /dev
+ echo "done."
+}
+
+# I hate this hack. -- Md
+make_extra_nodes() {
+ if [ -f /etc/udev/links.conf ]; then
+ 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 "unparseable line ($type $name $arg1)"
+ ;;
+ esac
+ done
+ fi
+}
+
+##############################################################################
+
+if [ "$udev_root" != "/dev" ]; then
+ echo "WARNING: udev_root != /dev"
+
+case "$1" in
+ start)
+ if [ -e "$udev_root/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none $udev_root
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ echo "done."
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Unmounting $udev_root..."
+ # unmounting with -l should never fail
+ if umount -l $udev_root; then
+ echo "done."
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+ exit 0
+fi # udev_root != /dev/
+
+##############################################################################
+# 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/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ unmount_devpts
+ mount_ramfs
+ ACTION=add
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+# /etc/init.d/mountvirtfs start
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ unmount_devpts
+ echo -n "Unmounting /dev..."
+ # unmounting with -l should never fail
+ if umount -l /dev; then
+ echo "done."
+ umount -l /.dev || true
+# /etc/init.d/mountvirtfs start
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Recreating device nodes..."
+ ACTION=add
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/packages/udev/udev-065/init b/packages/udev/udev-065/init
new file mode 100644
index 0000000000..16efb31542
--- /dev/null
+++ b/packages/udev/udev-065/init
@@ -0,0 +1,178 @@
+#!/bin/sh -e
+
+PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+UDEVSTART=/sbin/udevstart
+
+# default maximum size of the /dev ramfs
+ramfs_size="1M"
+
+[ -x $UDEVSTART ] || exit 0
+
+. /etc/udev/udev.conf
+
+case "$(uname -r)" in
+ 2.[012345].*)
+ echo "udev requires a kernel >= 2.6, not started."
+ exit 0
+ ;;
+esac
+
+if ! grep -q '[[:space:]]ramfs$' /proc/filesystems; then
+ echo "udev requires ramfs support, not started."
+ exit 0
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "udev requires hotplug support, not started."
+ exit 0
+fi
+
+##############################################################################
+
+# we need to unmount /dev/pts/ and remount it later over the ramfs
+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 ramfs over /dev, if somebody did not already do it
+mount_ramfs() {
+ if grep -E -q "^[^[:space:]]+ /dev ramfs" /proc/mounts; then
+ return 0
+ fi
+
+ # /.dev is used by /sbin/MAKEDEV to access the real /dev directory.
+ # if you don't like this, remove /.dev/.
+ [ -d /.dev ] && mount --bind /dev /.dev
+
+ echo -n "Mounting a ramfs over /dev..."
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none /dev
+ echo "done."
+}
+
+# I hate this hack. -- Md
+make_extra_nodes() {
+ if [ -f /etc/udev/links.conf ]; then
+ 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 "unparseable line ($type $name $arg1)"
+ ;;
+ esac
+ done
+ fi
+}
+
+##############################################################################
+
+if [ "$udev_root" != "/dev" ]; then
+ echo "WARNING: udev_root != /dev"
+
+case "$1" in
+ start)
+ if [ -e "$udev_root/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ mount -n -o size=$ramfs_size,mode=0755 -t ramfs none $udev_root
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ echo "done."
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Unmounting $udev_root..."
+ # unmounting with -l should never fail
+ if umount -l $udev_root; then
+ echo "done."
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+ exit 0
+fi # udev_root != /dev/
+
+##############################################################################
+# 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/.udev.tdb" ]; then
+ if mountpoint -q /dev/; then
+ echo "FATAL: udev is already active on $udev_root."
+ exit 1
+ else
+ echo "WARNING: .udev.tdb already exists on the old $udev_root!"
+ fi
+ fi
+ unmount_devpts
+ mount_ramfs
+ ACTION=add
+ echo -n "Creating initial device nodes..."
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+# /etc/init.d/mountvirtfs start
+ ;;
+ stop)
+ start-stop-daemon -K -x /sbin/udevd
+ unmount_devpts
+ echo -n "Unmounting /dev..."
+ # unmounting with -l should never fail
+ if umount -l /dev; then
+ echo "done."
+ umount -l /.dev || true
+# /etc/init.d/mountvirtfs start
+ else
+ echo "failed."
+ fi
+ ;;
+ restart|force-reload)
+ start-stop-daemon -K -x /sbin/udevd
+ echo -n "Recreating device nodes..."
+ ACTION=add
+ $UDEVSTART
+ make_extra_nodes
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/packages/udev/udev-070/fix-alignment.patch b/packages/udev/udev-070/fix-alignment.patch
deleted file mode 100644
index 8c7b8b5ac5..0000000000
--- a/packages/udev/udev-070/fix-alignment.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-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/packages/udev/udev-070/init b/packages/udev/udev-070/init
deleted file mode 100644
index d9fd45a600..0000000000
--- a/packages/udev/udev-070/init
+++ /dev/null
@@ -1,196 +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/
- mount -n -o move /etc/udev /dev/.static/dev
-}
-
-# 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 --mode=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 ]; 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
- echo "" > /proc/sys/kernel/hotplug
- 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/packages/udev/udev.inc b/packages/udev/udev.inc
index 0b51df4797..9ab17e87f4 100644
--- a/packages/udev/udev.inc
+++ b/packages/udev/udev.inc
@@ -2,6 +2,14 @@ DESCRIPTION = "udev is a program which dynamically creates and removes device no
/dev/. It responds to /sbin/hotplug device events and requires a 2.6 kernel."
LICENSE = "GPL"
+SRC_URI += " \
+ file://udev.rules \
+ file://links.conf \
+ file://permissions.rules \
+ file://mount.sh \
+ file://local.rules \
+ file://init"
+
UDEV_DEVFS_RULES ?= "0"
PACKAGES =+ "udev-utils"
@@ -34,9 +42,17 @@ do_install () {
oe_runmake 'DESTDIR=${D}' INSTALL=install install
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
+
+ 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 ${S}/etc/udev/udev.rules.devfs ${D}${sysconfdir}/udev/rules.d/50-udev.rules
fi
- install -d ${D}${sysconfdir}/udev/rules.d/
- install -m 0644 ${S}/etc/udev/debian/permissions.rules ${D}${sysconfdir}/udev/rules.d/
+
+ install -d ${D}${sysconfdir}/udev/scripts/
+
+ install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
}
diff --git a/packages/udev/udev_058.bb b/packages/udev/udev_058.bb
index bab87e6cb2..0e3b727040 100644
--- a/packages/udev/udev_058.bb
+++ b/packages/udev/udev_058.bb
@@ -2,6 +2,7 @@ SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://tmpfs.patch;patch=1 \
file://noasmlinkage.patch;patch=1 \
file://flags.patch;patch=1 \
+ file://permissions.rules \
file://init"
include udev.inc
diff --git a/packages/udev/udev_063.bb b/packages/udev/udev_063.bb
index cf67a065ae..d64dae102e 100644
--- a/packages/udev/udev_063.bb
+++ b/packages/udev/udev_063.bb
@@ -3,8 +3,7 @@ SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
file://flags.patch;patch=1 \
file://fix-alignment.patch;patch=1 \
- file://tty-symlinks.patch;patch=1 \
- file://init"
+ file://tty-symlinks.patch;patch=1"
include udev.inc
diff --git a/packages/udev/udev_065.bb b/packages/udev/udev_065.bb
index f6a2783136..91a8b57626 100644
--- a/packages/udev/udev_065.bb
+++ b/packages/udev/udev_065.bb
@@ -2,8 +2,7 @@ SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://tmpfs.patch;patch=1 \
file://noasmlinkage.patch;patch=1 \
file://flags.patch;patch=1 \
- file://tty-symlinks.patch;patch=1 \
- file://init"
+ file://tty-symlinks.patch;patch=1"
include udev.inc
diff --git a/packages/udev/udev_070.bb b/packages/udev/udev_070.bb
index c42cdf5f5b..f791fd8cf4 100644
--- a/packages/udev/udev_070.bb
+++ b/packages/udev/udev_070.bb
@@ -2,12 +2,7 @@ SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://tmpfs.patch;patch=1 \
file://noasmlinkage.patch;patch=1 \
file://flags.patch;patch=1 \
- file://tty-symlinks.patch;patch=1 \
- file://udev.rules \
- file://links.conf \
- file://init"
-
-UDEV_DEVFS_RULES = "0"
+ file://tty-symlinks.patch;patch=1"
include udev.inc
@@ -15,11 +10,6 @@ PR = "r1"
UDEV_EXTRAS = "extras/firmware/ extras/scsi_id/ extras/volume_id/ extras/run_directory/"
-do_install_append() {
- install -m 0644 ${WORKDIR}/udev.rules ${D}${sysconfdir}/udev/rules.d/
- install -m 0644 ${WORKDIR}/links.conf ${D}${sysconfdir}/udev/links.conf
-}
-
#FIXME UDEV MIGRATION PLAN:
#FIXME a) udevd is now a netlink daemon and needs to be started by the init script (ours is way too old)
#FIXME b) sbin/hotplug should no longer be called by the kernel, i.e. echo "" >/proc/sys/kernel/hotplug