From 053fbc69067ec4f62a992ae3c1067c6dbae386c8 Mon Sep 17 00:00:00 2001 From: Chih-Wei Huang Date: Wed, 15 Jan 2014 15:21:08 +0800 Subject: [PATCH] initrd: mount device under /dev/block/ instead of /dev/ It avoids the data lost issue on poweroff. --- initrd/init | 15 ++++++++++++--- initrd/scripts/2-mount | 8 ++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/initrd/init b/initrd/init index 3bc8b28..561a70b 100755 --- a/initrd/init +++ b/initrd/init @@ -3,7 +3,7 @@ # By Chih-Wei Huang # and Thorsten Glaser # -# Last updated 2011/08/18 +# Last updated 2014/01/15 # # License: GNU Public License # We explicitely grant the right to use the scripts @@ -41,6 +41,7 @@ if test x"$HAS_CTTY" != x"Yes"; then echo 0 0 0 0 > /proc/sys/kernel/printk fi # initialise /dev (first time) + mkdir -p /dev/block echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s # re-run this script with a controlling tty @@ -69,7 +70,15 @@ try_mount() check_root() { - try_mount ro $1 /mnt && [ -e /mnt/$SRC/ramdisk.img ] + if [ "`dirname $1`" = "/dev" ]; then + [ -e $1 ] || return 1 + blk=`basename $1` + [ ! -e /dev/block/$blk ] && ln $1 /dev/block + dev=/dev/block/$blk + else + dev=$1 + fi + try_mount ro $dev /mnt && [ -e /mnt/$SRC/ramdisk.img ] [ $? -ne 0 ] && return 1 zcat /mnt/$SRC/ramdisk.img | cpio -id > /dev/null if [ -e /mnt/$SRC/system.sfs ]; then @@ -112,7 +121,7 @@ echo -n Detecting Android-x86... mount -t tmpfs tmpfs /android cd /android while :; do - for device in ${ROOT:-/dev/sr* /dev/[hs]d[a-z]*}; do + for device in ${ROOT:-/dev/sr* /dev/[hs]d[a-z]* /dev/mmcblk*}; do check_root $device && break 2 mountpoint -q /mnt && umount /mnt done diff --git a/initrd/scripts/2-mount b/initrd/scripts/2-mount index d6bc119..4735ce0 100644 --- a/initrd/scripts/2-mount +++ b/initrd/scripts/2-mount @@ -10,10 +10,10 @@ mount_data() { mountpoint -q data && return - if [ -b "$DATA" ]; then - mount $DATA data - elif [ -b "/dev/$DATA" ]; then - mount /dev/$DATA data + blk=`basename $DATA` + if [ -b "/dev/$blk" ]; then + [ ! -e /dev/block/$blk ] && ln /dev/$blk /dev/block + mount /dev/block/$blk data elif [ -d /mnt/$SRC/data ]; then remount_rw mount --bind /mnt/$SRC/data data -- 2.11.0