udev: Add udev rule to auto-load the sd_mod module on demand, closing OE bug #811
authorMatthias Hentges <oe@hentges.net>
Tue, 18 Apr 2006 17:22:28 +0000 (17:22 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Tue, 18 Apr 2006 17:22:28 +0000 (17:22 +0000)
Add basic auto-mounting support with automatic creation and deletion of mount-points

packages/udev/files/mount.sh
packages/udev/udev-084/udev.rules
packages/udev/udev_084.bb

index 010b728..48c7844 100644 (file)
@@ -8,6 +8,7 @@
 MOUNT="/bin/mount"
 PMOUNT="/usr/bin/pmount"
 UMOUNT="/bin/umount"
+name="`basename "$DEVNAME"`"
 
 for line in `cat /etc/udev/mount.blacklist | grep -v ^#`
 do
@@ -17,7 +18,29 @@ do
                exit 0
        fi
 done
+
+automount() {  
+       ! test -d "/media/$name" && mkdir -p "/media/$name"
+       
+       if ! $MOUNT -t auto -o sync $DEVNAME "/media/$name"
+       then
+               #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/media/$name\" failed!"
+               rm_dir "/media/$name"
+       else
+               logger "mount.sh/automount" "Auto-mount of [/media/$name] successful"
+               touch "/tmp/.automount-$name"
+       fi
+}
        
+rm_dir() {
+       # We do not want to rm -r populated directories
+       if test "`find "$1" | wc -l | tr -d " "`" -lt 2 -a -d "$1"
+       then
+               ! test -z "$1" && rm -r "$1"
+       else
+               logger "mount.sh/automount" "Not removing non-empty directory [$1]"
+       fi
+}
 
 if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then
        if [ -x "$PMOUNT" ]; then
@@ -25,11 +48,20 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then
        elif [ -x $MOUNT ]; then
                $MOUNT $DEVNAME 2> /dev/null
        fi
+       
+       # If the device isn't mounted at this point, it isn't configured in fstab
+       cat /proc/mounts | awk '{print $1}' | grep -q "^$DEVNAME$" || automount 
+       
 fi
 
+
+
 if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
        for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
        do
                $UMOUNT $mnt
        done
+       
+       # Remove empty directories from auto-mounter
+       test -e "/tmp/.automount-$name" && rm_dir "/media/$name"
 fi
index 7b4152c..3ac51b3 100644 (file)
@@ -15,6 +15,7 @@
 
 # SCSI devices
 BUS=="scsi", KERNEL=="sr[0-9]*",       NAME="scd%n", SYMLINK+="sr%n"
+SUBSYSTEM=="scsi_device", SYSFS{type}=="0|7|14", RUN+="/sbin/modprobe sd_mod"
 
 # USB devices
 BUS=="usb", KERNEL=="auer[0-9]*",      NAME="usb/%k"
index 30baa9e..6ca02a5 100644 (file)
@@ -14,7 +14,7 @@ include udev.inc
 
 INITSCRIPT_PARAMS = "start 03 S . start 55 0 6 ."
 
-PR = "r5"
+PR = "r6"
 
 FILES_${PN} += "${base_libdir}"
 UDEV_EXTRAS = "extras/firmware/ extras/scsi_id/ extras/volume_id/ extras/run_directory/"