diff options
author | Richard Purdie <rpurdie@rpsys.net> | 2005-09-20 14:49:36 +0000 |
---|---|---|
committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2005-09-20 14:49:36 +0000 |
commit | eb992319a0a412435289e60b5e666da07133d1f5 (patch) | |
tree | 1cee9b6e532cf1c859026c1b740ffb01c4b86285 | |
parent | c838ad939cd52d897390eefb9b578cd654b9e98d (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.
-rwxr-xr-x | packages/udev/files/init | 234 | ||||
-rw-r--r-- | packages/udev/files/links.conf (renamed from packages/udev/udev-070/links.conf) | 0 | ||||
-rw-r--r-- | packages/udev/files/local.rules | 3 | ||||
-rw-r--r-- | packages/udev/files/mount.sh | 25 | ||||
-rw-r--r-- | packages/udev/files/permissions.rules | 81 | ||||
-rw-r--r-- | packages/udev/files/udev.rules (renamed from packages/udev/udev-070/udev.rules) | 2 | ||||
-rw-r--r-- | packages/udev/udev-058/init | 178 | ||||
-rw-r--r-- | packages/udev/udev-058/noasmlinkage.patch (renamed from packages/udev/files/noasmlinkage.patch) | 0 | ||||
-rw-r--r-- | packages/udev/udev-063/init | 178 | ||||
-rw-r--r-- | packages/udev/udev-065/init | 178 | ||||
-rw-r--r-- | packages/udev/udev-070/fix-alignment.patch | 24 | ||||
-rw-r--r-- | packages/udev/udev-070/init | 196 | ||||
-rw-r--r-- | packages/udev/udev.inc | 20 | ||||
-rw-r--r-- | packages/udev/udev_058.bb | 1 | ||||
-rw-r--r-- | packages/udev/udev_063.bb | 3 | ||||
-rw-r--r-- | packages/udev/udev_065.bb | 3 | ||||
-rw-r--r-- | packages/udev/udev_070.bb | 12 |
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 |