[oe-commits] mike.looijmans at topic.nl : busybox-mdev: Support automatic mounting of block devices

git at git.openembedded.org git at git.openembedded.org
Fri Dec 19 18:09:09 UTC 2014


Module: openembedded-core.git
Branch: master-next
Commit: 19073fb991b3e2d2304e55f94e30674adf375197
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=19073fb991b3e2d2304e55f94e30674adf375197

Author: mike.looijmans at topic.nl <mike.looijmans at topic.nl>
Date:   Thu Dec 18 15:17:31 2014 +0100

busybox-mdev: Support automatic mounting of block devices

Upon inserting a USB stick or similar device, mdev will run
an automounter script that mounts valid partitions on
/media/<device>. The script first checks /etc/fstab entries
so that mounting on UUID or LABEL or using custom mount options
is still possible. If /etc/fstab does not contain particular
mount options, the script will create (and remove) the mountpoint
automatically.
The script also supports full disk partitions (devices without
partition table).

The following environments can be set in /etc/default/mdev:
MDEV_AUTOMOUNT=n (Disables automounting completely)
MDEV_AUTOMOUNT_ROOT=/media (Change the mount root location)

Automatic mounting for a particular device can be disabled by
creating a file "/dev/<device>.nomount". This is helpful in
scripts that create partitions for example, and want to perform
specific actions which require the device to remain unmounted.

A more complex variation (using LABEL based mounts) on this script
has been in use in OpenPLi for many years now, and I've used this
one on many projects already, so it's about time to push this to
mainline.

Signed-off-by: Mike Looijmans <mike.looijmans at topic.nl>
Signed-off-by: Ross Burton <ross.burton at intel.com>

---

 meta/recipes-core/busybox/busybox.inc         |  1 +
 meta/recipes-core/busybox/busybox_1.22.1.bb   |  1 +
 meta/recipes-core/busybox/busybox_git.bb      |  1 +
 meta/recipes-core/busybox/files/mdev-mount.sh | 63 +++++++++++++++++++++++++++
 meta/recipes-core/busybox/files/mdev.conf     |  3 ++
 5 files changed, 69 insertions(+)

diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index deb2ee4..0769d92 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -270,6 +270,7 @@ do_install () {
                        install -m 644 ${WORKDIR}/mdev.conf ${D}${sysconfdir}/mdev.conf
                        install -d ${D}${sysconfdir}/mdev
                        install -m 0755 ${WORKDIR}/find-touchscreen.sh ${D}${sysconfdir}/mdev
+                       install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
                fi
 	fi
 
diff --git a/meta/recipes-core/busybox/busybox_1.22.1.bb b/meta/recipes-core/busybox/busybox_1.22.1.bb
index 8879e52..dd61a26 100644
--- a/meta/recipes-core/busybox/busybox_1.22.1.bb
+++ b/meta/recipes-core/busybox/busybox_1.22.1.bb
@@ -20,6 +20,7 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
            file://busybox-syslog.default \
            file://mdev \
            file://mdev.conf \
+           file://mdev-mount.sh \
            file://umount.busybox \
            file://defconfig \
            file://busybox-syslog.service.in \
diff --git a/meta/recipes-core/busybox/busybox_git.bb b/meta/recipes-core/busybox/busybox_git.bb
index f2cc119..f91b552 100644
--- a/meta/recipes-core/busybox/busybox_git.bb
+++ b/meta/recipes-core/busybox/busybox_git.bb
@@ -24,6 +24,7 @@ SRC_URI = "git://busybox.net/busybox.git \
            file://busybox-syslog.default \
            file://mdev \
            file://mdev.conf \
+           file://mdev-mount.sh \
            file://umount.busybox \
            file://defconfig \
            file://busybox-syslog.service.in \
diff --git a/meta/recipes-core/busybox/files/mdev-mount.sh b/meta/recipes-core/busybox/files/mdev-mount.sh
new file mode 100644
index 0000000..d5d66d6
--- /dev/null
+++ b/meta/recipes-core/busybox/files/mdev-mount.sh
@@ -0,0 +1,63 @@
+#!/bin/sh
+MDEV_AUTOMOUNT=y
+MDEV_AUTOMOUNT_ROOT=/run/media
+[ -f /etc/default/mdev ] && . /etc/default/mdev
+if [ "${MDEV_AUTOMOUNT}" = "n" ] ; then
+	exit 0
+fi
+
+case "$ACTION" in
+	add|"")
+		ACTION="add"
+		# check if already mounted
+		if grep -q "^/dev/${MDEV} " /proc/mounts ; then
+			# Already mounted
+			exit 0
+		fi
+		DEVBASE=`expr substr $MDEV 1 3`
+		if [ "${DEVBASE}" == "mmc" ] ; then
+			DEVBASE=`expr substr $MDEV 1 7`
+		fi
+		# check for "please don't mount it" file
+		if [ -f "/dev/nomount.${DEVBASE}" ] ; then
+			# blocked
+			exit 0
+		fi
+		# check for full-disk partition
+		if [ "${DEVBASE}" == "${MDEV}" ] ; then
+			if [ -d /sys/block/${DEVBASE}/${DEVBASE}*1 ] ; then
+				# Partition detected, just quit
+				exit 0
+			fi
+			if [ ! -f /sys/block/${DEVBASE}/size ] ; then
+				# No size at all
+				exit 0
+			fi
+			if [ `cat /sys/block/${DEVBASE}/size` == 0 ] ; then
+				# empty device, bail out
+				exit 0
+			fi
+		fi
+		# first allow fstab to determine the mountpoint
+		if ! mount /dev/$MDEV > /dev/null 2>&1
+		then
+			MOUNTPOINT="${MDEV_AUTOMOUNT_ROOT}/$MDEV"
+			mkdir "$MOUNTPOINT"
+			mount -t auto /dev/$MDEV "$MOUNTPOINT"
+		fi
+		;;
+	remove)
+		MOUNTPOINT=`grep "^/dev/$MDEV\s" /proc/mounts | cut -d' ' -f 2`
+		if [ ! -z "$MOUNTPOINT" ]
+		then
+			umount "$MOUNTPOINT"
+			rmdir "$MOUNTPOINT"
+		else
+			umount /dev/$MDEV
+		fi
+		;;
+	*)
+		# Unexpected keyword
+		exit 1
+		;;
+esac
diff --git a/meta/recipes-core/busybox/files/mdev.conf b/meta/recipes-core/busybox/files/mdev.conf
index 6dfd161..17e93da 100644
--- a/meta/recipes-core/busybox/files/mdev.conf
+++ b/meta/recipes-core/busybox/files/mdev.conf
@@ -37,3 +37,6 @@ input/mice 0:0 0660
 input/mouse.* 0:0 0660
 
 tun[0-9]* 0:0 0660 =net/
+
+[hs]d[a-z][0-9]? 0:0 660 */etc/mdev/mdev-mount.sh
+mmcblk[0-9].* 0:0 660 */etc/mdev/mdev-mount.sh



More information about the Openembedded-commits mailing list