summaryrefslogtreecommitdiff
path: root/packages/udev/udev-063/init
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/udev/udev-063/init
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/udev/udev-063/init')
-rw-r--r--packages/udev/udev-063/init178
1 files changed, 178 insertions, 0 deletions
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
+