summaryrefslogtreecommitdiff
path: root/recipes-images/images/files/library/genext3fs.sh
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2016-08-17 15:12:40 +0200
committerStefan Agner <stefan.agner@toradex.com>2016-09-28 14:14:23 -0700
commit2e01657c7435ad629731f2be3ca842773ff3b939 (patch)
tree4040d50f1dda3199c32d2ae21062424de882bd05 /recipes-images/images/files/library/genext3fs.sh
parent4b914089531c92620d4a2f7b5e04c65c4b4d5753 (diff)
images: mv all files into recipes-image/image
This requires to adjust the path to include files, e.g.: -require recipes/images/trdx-image-fstype.inc +require recipes-images/images/trdx-image-fstype.inc Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Acked-by: Stefan Agner <stefan.agner@toradex.com>
Diffstat (limited to 'recipes-images/images/files/library/genext3fs.sh')
-rwxr-xr-xrecipes-images/images/files/library/genext3fs.sh80
1 files changed, 80 insertions, 0 deletions
diff --git a/recipes-images/images/files/library/genext3fs.sh b/recipes-images/images/files/library/genext3fs.sh
new file mode 100755
index 0000000..ffcf060
--- /dev/null
+++ b/recipes-images/images/files/library/genext3fs.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+#creates a file containing a ext3 binary blob of the content of the ../rootfs folder
+
+# sometimes we need the binary echo, not the shell builtin
+ECHO=`which echo`
+
+MOUNTPOINT="mnt/trdx-rootfs"
+
+Usage()
+{
+ echo "creates a file containing a ext3 binary blob. Output file name taken from command line"
+ echo "Usage: genext3fs.sh [OPTION]... dest_file_name"
+ echo "-h : Prints this message"
+ echo "-b : Sets the partition size in MBytes, default 256"
+ echo "-d : Selects the directory which contains the partition content, default ../rootfs"
+ echo ""
+}
+
+PARTITIONSIZE=256
+SRCPATH=../rootfs
+
+while getopts "b:d:h" Option ; do
+ case $Option in
+ h) Usage
+ # Exit if only usage (-h) was specfied.
+ if [[ "$#" -eq "1" ]] ; then
+ exit 10
+ fi
+ exit 0
+ ;;
+ b) PARTITIONSIZE=$OPTARG
+ ;;
+ d) SRCPATH=$OPTARG
+ ;;
+ esac
+done
+#adjust the commandline arg for the now used options
+shift $(($OPTIND - 1))
+
+#create the file used for the loopbackdevice and format it for ext3
+#answer y to "is not a block special device"
+dd if=/dev/zero of=$@ bs=1024k count=$PARTITIONSIZE
+mkfs.ext3 -F -L rootfs $@
+#disable fsck checks based on mount count or time interval
+tune2fs -c 0 -i 0 $@
+
+#prepare mountpoint for the loopdevice
+sudo mkdir -p $MOUNTPOINT
+sudo umount $MOUNTPOINT &> /dev/null
+sudo rm -rf $MOUNTPOINT/*
+#mount the file as a loopdevice
+#there seems to be a race between mkfs.ext3 not yet finished and mount already trying to mount, so try until it works
+MOUNTED=0
+while [ "$MOUNTED" -eq "0" ] ; do
+ sync
+ sleep 1
+ sudo mount $@ $MOUNTPOINT/ -o loop -t ext3
+ MOUNTED=`mount | grep -c "$MOUNTPOINT"`
+done
+#extract rootfs into the file
+sudo cp -rpP $SRCPATH/* $MOUNTPOINT
+if [ "$?" -ne "0" ] ; then
+ $ECHO -e "\033[1mCopying the rootfs failed.\033[0m"
+ echo "Check for error messages from cp"
+ sudo rm $@
+ exit 1
+fi
+
+#unmount again
+sudo umount $MOUNTPOINT
+
+#if the mounting was unsuccesful all rootfs data now still is in MOUNTPOINT, and $@ contains an empty fs
+#delete $@ in that case to fail early
+sync
+FAILED=`ls $MOUNTPOINT | wc -l`
+if [ "$FAILED" -ne "0" ] ; then
+ $ECHO -e "\033[1mMounting the loopdevice $@ failed.\033[0m"
+ sudo rm $@
+ exit 1
+fi