|  | @ -4,15 +4,64 @@ | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | MOUNTBASE=/mnt |  |  | MOUNTBASE=/mnt | 
			
		
	
		
		
			
				
					|  |  | MOUNTPOINT="$MOUNTBASE/$MDEV" |  |  | MOUNTPOINT="$MOUNTBASE/$MDEV" | 
			
		
	
		
		
			
				
					|  |  | if [ "$MDEV" = "mmcblk0p3" ]; then |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 	MOUNTPOINT="$MOUNTBASE/linuxrootfs1" |  |  |  | 
			
		
	
		
		
			
				
					|  |  | elif [ "$MDEV" = "mmcblk0p7" ]; then |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 	MOUNTPOINT="$MOUNTBASE/userdata" |  |  |  | 
			
		
	
		
		
			
				
					|  |  | fi |  |  |  | 
			
		
	
		
		
			
				
					|  |  | ROOTDEV=$(readlink /dev/root) |  |  | ROOTDEV=$(readlink /dev/root) | 
			
		
	
		
		
			
				
					
					|  |  | 
 |  |  | BLOCKS="/sys/block/mmcblk0/mmcblk0p*/uevent" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  | KERNELDEV="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | K_PARTNAME="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | ROOTFSDEV="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | R_PARTNAME="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | ROOTSUBDIR="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | NEWLAYOUT=0 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | # to use partnames in old layout, set it to 1 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | USE_PARTNAMES=0 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | # | 
			
		
	
		
		
			
				
					|  |  |  |  |  | check_mmcblk() | 
			
		
	
		
		
			
				
					|  |  |  |  |  | { | 
			
		
	
		
		
			
				
					|  |  |  |  |  | devname="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | partname="" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | for i in $BLOCKS;do | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	if [ "$i" != "$BLOCKS" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 		devname=$(cat $i | grep DEVNAME | cut -d '=' -f 2) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 		if [ "$devname" == "$MDEV" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			partname=$(cat $i | grep PARTNAME | cut -d '=' -f 2) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			if [ -n "$(echo $partname | grep 'kernel')" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				KERNELDEV=$devname | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				K_PARTNAME=$partname | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				break | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			elif [ -n "$(echo $partname | grep 'rootfs')" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				ROOTFSDEV=$devname | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				R_PARTNAME=$partname | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				if [ -n "$(echo $partname | grep 'linuxrootfs')" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 					NEWLAYOUT=1 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 					R_PARTNAME="linuxrootfs1" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				break | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			elif [ -n "$(echo $partname | grep 'userdata')" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				ROOTFSDEV=$devname | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				R_PARTNAME=$partname | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				NEWLAYOUT=1 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				break | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 		fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | done | 
			
		
	
		
		
			
				
					|  |  |  |  |  | [ "$partname" == "swap" -o "$partname" == "swapdata" ] && exit 0 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | [ "$NEWLAYOUT" == "1" -o "$USE_PARTNAMES" == "1" ] && MOUNTPOINT="$MOUNTBASE/$R_PARTNAME" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | # | 
			
		
	
		
		
			
				
					|  |  |  |  |  | read_cmdline() | 
			
		
	
		
		
			
				
					|  |  |  |  |  | { | 
			
		
	
		
		
			
				
					|  |  |  |  |  | for param in $(cat /proc/cmdline);do | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	if [ -n "$(echo $param | grep rootsubdir)" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 		ROOTSUBDIR=$(echo $param | cut -d '=' -f 2) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 		break | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | done | 
			
		
	
		
		
			
				
					|  |  |  |  |  | } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | # check partition names | 
			
		
	
		
		
			
				
					|  |  |  |  |  | check_mmcblk | 
			
		
	
		
		
			
				
					|  |  | # do not add or remove root device again... |  |  | # do not add or remove root device again... | 
			
		
	
		
		
			
				
					
					|  |  | [ "$ROOTDEV" = "$MDEV" ] && exit 0 |  |  | [ "$ROOTDEV" = "$MDEV" -a "$R_PARTNAME" != "userdata" ] && exit 0 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | if [ -e /tmp/.nomdevmount ]; then |  |  | if [ -e /tmp/.nomdevmount ]; then | 
			
		
	
		
		
			
				
					|  |  | 	LOGINFO "no action on $MDEV -- /tmp/.nomdevmount exists" |  |  | 	LOGINFO "no action on $MDEV -- /tmp/.nomdevmount exists" | 
			
		
	
	
		
		
			
				
					|  | @ -22,36 +71,78 @@ fi | 
			
		
	
		
		
			
				
					|  |  | case "$ACTION" in |  |  | case "$ACTION" in | 
			
		
	
		
		
			
				
					|  |  | 	add) |  |  | 	add) | 
			
		
	
		
		
			
				
					|  |  | 		# do not mount kernel partitions |  |  | 		# do not mount kernel partitions | 
			
		
	
		
		
			
				
					
					|  |  | 		for i in 2 4 6 8; do |  |  | 		if [ "$KERNELDEV" == "$MDEV" ];then | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 			if [ ${MDEV:$((${#MDEV}-1)):1} -eq $i ]; then |  |  | 			LOGINFO "[$ACTION] /dev/$MDEV is a kernel partition [$K_PARTNAME] - not mounting." | 
			
				
				
			
		
	
		
		
			
				
					|  |  | 				LOGINFO "[$ACTION] /dev/$MDEV is a kernel partition - not mounting." |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 				exit 0 |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 			fi |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 		done |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 		# TODO: check for partitions |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 		if grep -q "/dev/$MDEV" /proc/mounts; then |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 			LOGINFO "/dev/$MDEV already mounted - not mounting again" |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  | 			exit 0 |  |  | 			exit 0 | 
			
		
	
		
		
			
				
					|  |  | 		fi |  |  | 		fi | 
			
		
	
		
		
			
				
					
					|  |  | 		LOGINFO "[$ACTION] mounting /dev/$MDEV to $MOUNTPOINT" |  |  | 		# TODO: check for partitions | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 		# remove old mountpoint symlinks we might have for this device |  |  | 		if [ "$NEWLAYOUT" == "1" ];then | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 		rm -f $MOUNTPOINT |  |  | 			if grep -q $MOUNTPOINT /proc/mounts; then | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 		mkdir -p $MOUNTPOINT |  |  | 				LOGINFO "/dev/$MDEV already mounted [$R_PARTNAME] - not mounting again" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 		mount -t auto /dev/$MDEV $MOUNTPOINT 2>&1 >/dev/null |  |  | 				exit 0 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 		RET=$? |  |  | 			fi | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 		if [ $RET != 0 ]; then |  |  | 			mkdir -p /tmp/$MDEV | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 			LOGWARN "mount   /dev/$MDEV $MOUNTPOINT failed with $RET" |  |  | 			mount -t auto /dev/$MDEV /tmp/$MDEV 2>&1 >/dev/null | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 			LOGWARN "        $OUT1" |  |  | 			RET=$? | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 			rmdir $MOUNTPOINT |  |  | 			[ $RET != 0 ] && LOGWARN "mount /dev/$MDEV to /tmp/$MDEV failed with $RET" && rmdir /tmp/$MDEV | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  | 			if [ "$R_PARTNAME" == "linuxrootfs1" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				LOGINFO "mounting /dev/$MDEV [$R_PARTNAME] to $MOUNTPOINT" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				mkdir -p $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				mount --bind /tmp/$MDEV/linuxrootfs1 $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			elif [ "$R_PARTNAME" == "userdata" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				# parse cmdline for rootsubdir | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				read_cmdline | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				for i in /tmp/$MDEV/*;do | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 					if [ -n "$(echo $i | grep linuxrootfs)" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 						if [ "$ROOTSUBDIR" == "$(basename $i)" ];then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 							LOGINFO "/dev/$MDEV rootsubdir [$ROOTSUBDIR] is already mounted as root" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 							continue | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 						fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 						MOUNTPOINT="$MOUNTBASE/$(basename $i)" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 						if grep -q $MOUNTPOINT /proc/mounts; then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 							LOGINFO "/dev/$MDEV already mounted [$(basename $i)] - not mounting again" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 						else | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 							LOGINFO "mounting /dev/$MDEV [$(basename $i)] to $MOUNTPOINT" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 							mkdir -p $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 							mount --bind /tmp/$MDEV/$(basename $i) $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 						fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 					fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				done | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			umount -lf /tmp/$MDEV | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			RET=$? | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			if [ $RET = 0 ]; then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				rmdir /tmp/$MDEV | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			else | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				LOGWARN "umount /tmp/$MDEV failed with $RET" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 		else | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			if grep -q "/dev/$MDEV" /proc/mounts; then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				LOGINFO "/dev/$MDEV already mounted - not mounting again" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				exit 0 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			fi | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			LOGINFO "[$ACTION] mounting /dev/$MDEV to $MOUNTPOINT" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			# remove old mountpoint symlinks we might have for this device | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			rm -f $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			mkdir -p $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			mount -t auto /dev/$MDEV $MOUNTPOINT 2>&1 >/dev/null | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			RET=$? | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			if [ $RET != 0 ]; then | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				LOGWARN "mount   /dev/$MDEV $MOUNTPOINT failed with $RET" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				LOGWARN "        $OUT1" | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 				rmdir $MOUNTPOINT | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 			fi | 
			
		
	
		
		
			
				
					|  |  | 		fi |  |  | 		fi | 
			
		
	
		
		
			
				
					|  |  | 		;; |  |  | 		;; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	# I think never comes a 'remove' from mdev, because never the mmcblock will be removed | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	# It can be used for manually ( or per script ) umounting | 
			
		
	
		
		
			
				
					|  |  | 	remove) |  |  | 	remove) | 
			
		
	
		
		
			
				
					|  |  | 		LOGINFO "[$ACTION] unmounting $MOUNTBASE/$MDEV" |  |  | 		LOGINFO "[$ACTION] unmounting $MOUNTBASE/$MDEV" | 
			
		
	
		
		
			
				
					
					|  |  | 		grep -q "^/dev/$MDEV " /proc/mounts || exit 0 # not mounted... |  |  | 		grep -q "$MOUNTBASE/$MDEV " /proc/mounts || exit 0 # not mounted... | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  | 		umount -lf $MOUNTBASE/$MDEV |  |  | 		umount -lf $MOUNTBASE/$MDEV | 
			
		
	
		
		
			
				
					|  |  | 		RET=$? |  |  | 		RET=$? | 
			
		
	
		
		
			
				
					|  |  | 		if [ $RET = 0 ]; then |  |  | 		if [ $RET = 0 ]; then | 
			
		
	
		
		
			
				
					
					|  |  | 			rmdir $MOUNTPOINT |  |  | 			rmdir $MOUNTBASE/$MDEV | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  | 		else |  |  | 		else | 
			
		
	
		
		
			
				
					|  |  | 			LOGWARN "umount $MOUNTBASE/$MDEV failed with $RET" |  |  | 			LOGWARN "umount $MOUNTBASE/$MDEV failed with $RET" | 
			
		
	
		
		
			
				
					|  |  | 		fi |  |  | 		fi | 
			
		
	
	
		
		
			
				
					|  | 
 |