#!/bin/sh # # UBI Volume creation/deletion/write/read test script # # Written in shell language to reduce dependencies to more sophisticated # interpreters, which may not be available on some stupid platforms. # # Author: Frank Haverkamp # # 1.0 Initial version # 1.1 Use ubiupdatevol instead of ubiwritevol # VERSION="1.1" export PATH=$PATH:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashutils/bin/ UBIMKVOL=ubimkvol UBIRMVOL=ubirmvol UBIUPDATEVOL=ubiupdatevol # 128 KiB 131072 # 256 KiB 262144 # 512 KiB 524288 SIZE_512K=524288 SIZE_1M=1310720 SELF=$0 MINVOL=10 MAXVOL=12 # # To have a standardized output I define the following function to be # used when a test was ok or when it failed. # failed () { echo "FAILED" } passed () { echo "PASSED" } # # Print sucess message. Consider to exit with zero as return code. # exit_success () { echo "SUCCESS" exit 0 } # # Print failure message. Consider to exit with non zero return code. # exit_failure () { echo "FAILED" exit 1 } ############################################################################### # # START # ############################################################################### fix_sysfs_issue () { echo -n "*** Fixing the sysfs issue with the /dev nodes ... " minor=0 major=`grep ubi0 /proc/devices | sed -e 's/\(.*\) ubi0/\1/'` rm -rf /dev/ubi0 mknod /dev/ubi0 c $major 0 for minor in `seq 0 $MAXVOL`; do ### echo " mknod /dev/ubi0_$minor c $major $(($minor + 1))" rm -rf /dev/ubi0_$minor mknod /dev/ubi0_$minor c $major $(($minor + 1)) done passed } # delete_volume - Delete a volume. If it does not exist, do not try # to delete it. # @id: volume id # delete_volume () { volume=$1 ### FIXME broken sysfs!!!! if [ -e /sys/class/ubi/$volume -o -e /sys/class/ubi/ubi0/$volume -o -e /sys/class/ubi/ubi0_$volume ]; then echo -n "*** Truncate volume if it exists ... " $UBIUPDATEVOL -d0 -n$volume -t if [ $? -ne "0" ] ; then exit_failure fi passed echo -n "*** Delete volume if it exists ... " $UBIRMVOL -d0 -n$volume if [ $? -ne "0" ] ; then exit_failure fi passed fi } mkvol_rmvol_test () { type=$1 ### Test if volume delete on non-existing volumes fails nicely for i in `seq $MINVOL $MAXVOL`; do echo "*** Delete if exist or not $i ... " delete_volume $i passed done ### Now deleting volumes must fail for i in `seq $MINVOL $MAXVOL`; do echo "*** Trying to delete non existing UBI Volume $i ... " $UBIRMVOL -d0 -n$i if [ $? -eq "0" ] ; then exit_failure fi passed done ### Test if volume creation works ok for i in `seq $MINVOL $MAXVOL`; do echo "*** Creating UBI Volume $i ... " echo " $UBIMKVOL -d0 -n$i -t$type -NNEW$i -s $SIZE_512K" $UBIMKVOL -d0 -n$i -t$type -N"NEW$i" -s $SIZE_512K if [ $? -ne "0" ] ; then exit_failure fi passed done ### Now deleting volumes must be ok for i in `seq $MINVOL $MAXVOL`; do echo "*** Trying to delete UBI Volume $i ... " $UBIRMVOL -d0 -n$i if [ $? -ne "0" ] ; then exit_failure fi passed done ### Now allocate too large volume echo -n "*** Try to create too large volume" $UBIMKVOL -d0 -n$MINVOL -t$type -N"NEW$MINVOL" -s 800000000 if [ $? -eq "0" ] ; then exit_failure fi passed } # writevol_test - Tests volume creation and writing data to it. # # @size: Size of random data to write # @type: Volume type static or dynamic # writevol_test () { size=$1 type=$2 echo "*** Write volume test with size $size" ### Make sure that volume exist, delete existing volume, create new delete_volume $MINVOL echo -n "*** Try to create volume ... " $UBIMKVOL -d0 -n$MINVOL -t$type -N"NEW$MINVOL" -s $SIZE_1M if [ $? -ne "0" ] ; then exit_failure fi passed ### Try to create same volume again echo -n "*** Try to create some volume again, this must fail ... " $UBIMKVOL -d0 -n$MINVOL -t$type -N"NEW$MINVOL" -s $SIZE_1M if [ $? -eq "0" ] ; then exit_failure fi passed ### Now create test data, write it, read it, compare it echo -n "*** Create test data ... " dd if=/dev/urandom of=testdata.bin bs=$size count=1 if [ $? -ne "0" ] ; then exit_failure fi passed echo "*** Now writing data to volume ... " # sleep 5 ls -l testdata.bin echo " $UBIUPDATEVOL -d0 -n$MINVOL testdata.bin" $UBIUPDATEVOL -d0 -n$MINVOL testdata.bin if [ $? -ne "0" ] ; then exit_failure fi passed if [ $type = "static" ] ; then echo "*** Download data with cat ... " cat /dev/ubi0_$MINVOL > readdata.bin if [ $? -ne "0" ] ; then exit_failure fi passed else echo "*** Download data with dd bs=1 ... " dd if=/dev/ubi0_$MINVOL of=readdata.bin bs=$size count=1 if [ $? -ne "0" ] ; then exit_failure fi passed # Size 1 does not work with this test ... # #echo "*** Download data with dd bs=$size ... " #dd if=/dev/ubi0_$MINVOL of=readdata2.bin bs=$size count=1 #if [ $? -ne "0" ] ; then # exit_failure #fi #passed #echo -n "*** Comparing data (1) ... " #cmp readdata.bin readdata2.bin #if [ $? -ne "0" ] ; then # exit_failure #fi #passed fi echo -n "*** Comparing data ... " cmp readdata.bin testdata.bin if [ $? -ne "0" ] ; then exit_failure fi passed } echo "***********************************************************************" echo "* UBI Testing starts now ... *" echo "* Good luck! *" echo "***********************************************************************" # Set to zero if not running on example hardware grep ubi /proc/devices > /dev/null if [ $? -ne "0" ]; then echo "No UBI found in /proc/devices! I am broken!" exit_failure fi # Set to zero if not running on example hardware grep 1142 /proc/cpuinfo > /dev/null if [ $? -eq "0" ]; then echo "Running on example hardware" mount -o remount,rw / / sleep 1 fix_sysfs_issue else echo "Running on Artems hardware" fi echo "***********************************************************************" echo "* mkvol/rmvol testing for static volumes ... *" echo "***********************************************************************" mkvol_rmvol_test static echo "***********************************************************************" echo "* mkvol/rmvol testing for dynamic volumes ... *" echo "***********************************************************************" mkvol_rmvol_test dynamic echo "***********************************************************************" echo "* write to static volumes ... *" echo "***********************************************************************" # 10 Erase blocks = (128 KiB - 64 * 2) * 10 # = 1309440 bytes # 128 KiB 131072 # 256 KiB 262144 # 512 KiB 524288 for size in 262144 131073 131072 2048 1 4096 12800 31313 ; do writevol_test $size static done echo "***********************************************************************" echo "* write to dynamic volumes ... *" echo "***********************************************************************" echo "VERSION: $VERSION" for size in 131073 131072 2048 1 4096 12800 31313 262144 ; do writevol_test $size dynamic done echo "***********************************************************************" echo "* Congratulations, no errors found! *" echo "* Have fun with your cool UBI system! *" echo "***********************************************************************" exit_success