]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
test: ums: Add script for testing UMS gadget operation
authorLukasz Majewski <l.majewski@samsung.com>
Mon, 18 Aug 2014 10:12:28 +0000 (12:12 +0200)
committerMarek Vasut <marex@denx.de>
Wed, 20 Aug 2014 11:10:33 +0000 (13:10 +0200)
This commit adds new test for UMS USB gadget to u-boot mainline tree.
It is similar in operation to the one already available in test/dfu
directory.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Stephen Warren <swarren@nvidia.com>
test/ums/README [new file with mode: 0644]
test/ums/ums_gadget_test.sh [new file with mode: 0755]

diff --git a/test/ums/README b/test/ums/README
new file mode 100644 (file)
index 0000000..c80fbfe
--- /dev/null
@@ -0,0 +1,30 @@
+UMS test script.
+
+ums_gadget_test.sh
+==================
+
+Example usage:
+1. On the target:
+   create UMS exportable partitions (with e.g. gpt write), or specify a
+   partition number (PART_NUM) as "-" to use the entire device
+   ums 0 mmc 0
+2. On the host:
+   sudo test/ums/ums_gadget_test.sh VID PID PART_NUM [-f FILE_SYSTEM] [test_file]
+   e.g. sudo test/ums/ums_gadget_test.sh 0525 a4a5 6 -f vfat ./dat_14M.img
+
+... where:
+    VID - UMS device USB Vendor ID
+    PID - UMS device USB Product ID
+    PART_NUM - is the partition number on which UMS operates or "-" to use the
+              whole device
+
+Information about available partitions on the target one can read with using
+the 'mmc part' or 'part list' commands.
+
+The partition num (PART_NUM) can be specified as '-' for using the whole device.
+
+The [-f FILE_SYSTEM] optional switch allows for formatting target partition to
+FILE_SYSTEM.
+
+The last, optional [test_file] parameter is for specifying the exact test file
+to use.
diff --git a/test/ums/ums_gadget_test.sh b/test/ums/ums_gadget_test.sh
new file mode 100755 (executable)
index 0000000..56d4616
--- /dev/null
@@ -0,0 +1,175 @@
+#! /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_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
+    umount $MNT_DIR
+
+
+    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