u-boot/test/ums/ums_gadget_test.sh
Lukasz Majewski fbd3b79d77 test: ums: Add sleep before unmount directory
This change helps to run script on machines with quite long uptime.
Without this the following error emerges:

File: ./dat_14M.img
umount: /mnt/tmp-ums-test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
TX: md5sum:083d3d22b542d3ecba61b12d17e03f9f
mount: /dev/sdd6 already mounted or /mnt/tmp-ums-test busy
mount: according to mtab, /dev/sdd6 is already mounted on /mnt/tmp-ums-test

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
2014-11-14 21:09:12 +01:00

184 lines
3.4 KiB
Bash
Executable File

#! /bin/bash
# Copyright (C) 2014 Samsung Electronics
# Lukasz Majewski <l.majewski@samsung.com>
#
# UMS operation test script
#
# SPDX-License-Identifier: GPL-2.0+
clear
COLOUR_RED="\33[31m"
COLOUR_GREEN="\33[32m"
COLOUR_ORANGE="\33[33m"
COLOUR_DEFAULT="\33[0m"
DIR=./
SUFFIX=img
RCV_DIR=rcv/
LOG_FILE=./log/log-`date +%d-%m-%Y_%H-%M-%S`
cd `dirname $0`
../dfu/dfu_gadget_test_init.sh 33M 97M
cleanup () {
rm -rf $RCV_DIR $MNT_DIR
}
control_c()
# run if user hits control-c
{
echo -en "\n*** CTRL+C ***\n"
umount $MNT_DIR
cleanup
exit 0
}
# trap keyboard interrupt (control-c)
trap control_c SIGINT
die () {
printf " $COLOUR_RED FAILED $COLOUR_DEFAULT \n"
cleanup
exit 1
}
calculate_md5sum () {
MD5SUM=`md5sum $1`
MD5SUM=`echo $MD5SUM | cut -d ' ' -f1`
echo "md5sum:"$MD5SUM
}
ums_test_file () {
printf "$COLOUR_GREEN========================================================================================= $COLOUR_DEFAULT\n"
printf "File:$COLOUR_GREEN %s $COLOUR_DEFAULT\n" $1
mount /dev/$MEM_DEV $MNT_DIR
if [ -f $MNT_DIR/dat_* ]; then
rm $MNT_DIR/dat_*
fi
cp ./$1 $MNT_DIR
while true; do
umount $MNT_DIR > /dev/null 2>&1
if [ $? -eq 0 ]; then
break
fi
printf "$COLOUR_ORANGE\tSleeping to wait for umount...$COLOUR_DEFAULT\n"
sleep 1
done
echo -n "TX: "
calculate_md5sum $1
MD5_TX=$MD5SUM
sleep 1
N_FILE=$DIR$RCV_DIR${1:2}"_rcv"
mount /dev/$MEM_DEV $MNT_DIR
cp $MNT_DIR/$1 $N_FILE || die $?
rm $MNT_DIR/$1
umount $MNT_DIR
echo -n "RX: "
calculate_md5sum $N_FILE
MD5_RX=$MD5SUM
if [ "$MD5_TX" == "$MD5_RX" ]; then
printf " $COLOUR_GREEN -------> OK $COLOUR_DEFAULT \n"
else
printf " $COLOUR_RED -------> FAILED $COLOUR_DEFAULT \n"
cleanup
exit 1
fi
}
printf "$COLOUR_GREEN========================================================================================= $COLOUR_DEFAULT\n"
echo "U-boot UMS test program"
if [ $EUID -ne 0 ]; then
echo "You must be root to do this." 1>&2
exit 100
fi
if [ $# -lt 3 ]; then
echo "Wrong number of arguments"
echo "Example:"
echo "sudo ./ums_gadget_test.sh VID PID PART_NUM [-f ext4] [test_file]"
die
fi
MNT_DIR="/mnt/tmp-ums-test"
VID=$1; shift
PID=$1; shift
PART_NUM=$1; shift
if [ "$1" == "-f" ]; then
shift
FS_TO_FORMAT=$1; shift
fi
TEST_FILE=$1
for f in `find /sys -type f -name idProduct`; do
d=`dirname ${f}`
if [ `cat ${d}/idVendor` != "${VID}" ]; then
continue
fi
if [ `cat ${d}/idProduct` != "${PID}" ]; then
continue
fi
USB_DEV=${d}
break
done
if [ -z "${USB_DEV}" ]; then
echo "Connect target"
echo "e.g. ums 0 mmc 0"
exit 1
fi
MEM_DEV=`find $USB_DEV -type d -name "sd[a-z]" | awk -F/ '{print $(NF)}' -`
mkdir -p $RCV_DIR
if [ ! -d $MNT_DIR ]; then
mkdir -p $MNT_DIR
fi
if [ "$PART_NUM" == "-" ]; then
PART_NUM=""
fi
MEM_DEV=$MEM_DEV$PART_NUM
if [ -n "$FS_TO_FORMAT" ]; then
echo -n "Formatting partition /dev/$MEM_DEV to $FS_TO_FORMAT"
mkfs -t $FS_TO_FORMAT /dev/$MEM_DEV > /dev/null 2>&1
if [ $? -eq 0 ]; then
printf " $COLOUR_GREEN DONE $COLOUR_DEFAULT \n"
else
die
fi
fi
printf "Mount: /dev/$MEM_DEV \n"
if [ -n "$TEST_FILE" ]; then
if [ ! -e $TEST_FILE ]; then
echo "No file: $TEST_FILE"
die
fi
ums_test_file $TEST_FILE
else
for file in $DIR*.$SUFFIX
do
ums_test_file $file
done
fi
cleanup
exit 0