[U-Boot] [PATCH 3/3] test: ums: Add script for testing UMS gadget operation

Lukasz Majewski l.majewski at samsung.com
Wed Jul 30 13:44:24 CEST 2014


Hi Stephen,

> On 07/29/2014 07:45 AM, Lukasz Majewski wrote:
> > This commit adds new test for UMS USB gadget to u-boot mainline
> > tree. It it similar in operation to the one already available in
> > test/dfu directory.
> 
> Patches 1 and 2,
> Acked-by: Stephen Warren <swarren at nvidia.com>
> 
> For this patch, I wonder whether:
> 
> a) Should it do some raw dd tests too, for partitions/devices without
> a filesystem? Perhaps we should have separate scripts (for each of
> DFU and UMS) for filesystem and raw testing. So, this could be
> addressed later.

I think that we should prepare separate scripts. One script per tested
functionality.

> 
> b) Should this script (optionally?) create the filesystem itself, so
> the test is completely self-contained. Otherwise, the user has to
> manually run e.g. parted and mk*fs themselves, by which time they've
> already tested UMS a fair bit without this script.

The test should be extended to accept an additional flat - e.g.
--create_fs.
As you pointed out, this could save some time.

> 
> c) Do we really need the "Y" parameters (filesystem type) to the
> script? "mount" will automatically try all known filesystem types on
> my Linux host at least, and it would make it simpler to run the
> script if you simply dropped the "-t" option to "mount".

I agree. The Y parameter will be removed and we will allow mount to do
the job.

> 
> > diff --git a/test/ums/README b/test/ums/README
> 
> > +Example usage:
> > +1. On the target:
> > +   create UMS exportable partition with a proper file system
> > created on
> > +   it (e.g. EXT4, FAT).
> > +   ums 0 mmc 0
> > +2. On the host:
> > +   sudo test/ums/ums_gadget_test.sh X Y dir [test_file]
> > +   e.g. sudo test/ums/ums_gadget_test.sh 1 vfat /mnt ./dat_14M.img
> 
> can you s/X/PARTNUM/ s/Y/fstype/ here. That'd make the example
> command a bit more explanatory even without the paragraph below that
> explains what X and Y are, and also make it easier to correlate the
> description with the command.

Ok, I will do that.

> 
> > +
> > +... where X is the partition number on which UMS operates and the
> > Y is +the file system. The 'dir' parameter is the mount directory
> > on the HOST. +Information about available partitions one can read
> > from target via the +'mmc part' command.
> 
> Perhaps this should say:
> 'mmc part' or 'part list' commands.

Ok.

> 
> > +The optional [test_file] parameter is for specifying the exact
> > test file +to use.
> > \ No newline at end of file
> 
> That's probably not right.

Ok.

> 
> > diff --git a/test/ums/ums_gadget_test.sh
> > b/test/ums/ums_gadget_test.sh
> 
> > +../dfu/dfu_gadget_test_init.sh 33M 97M
> 
> I'm just curious what's special about those two sizes.

Nothing special. I just wanted to have sufficiently large files to test
UMS capabilities (since I assume, that DFU will not transfer so large
files very often).

With UMS it is not so important to test the corner cases values (as we
did with DFU tests), but to check how well transfers of large files is
performed.

> 
> > +ums_test_file () {
> 
> > +    mount -t $2 /dev/$MEM_DEV $MNT_DIR
> > +    if [ -f $MNT_DIR/dat_* ]; then
> > +	rm $MNT_DIR/dat_*
> > +    fi
> > +    sync
> > +
> > +    cp ./$1 $MNT_DIR
> > +    sync
> > +    umount $MNT_DIR
> 
> I'm not sure any of those "sync"s are necessary; "mount" should sync
> as part of its own operation.

Yes, I agree. mount/umount do the sync as well. I will fix this.

> 
> > +    MD5_TX=$MD5SUM
> > +    sleep 1
> 
> Why do we need to sleep?

On my linux box there were some problems without this delay (probably
caused by time needed for plugging in USB device).

Maybe on your setup it will work smoothly.

> 
> > +if [ $# -lt 3 ]; then
> > +	echo "Wrong number of arguments"
> > +	echo "Example:"
> > +	echo "sudo ./ums_gadget_test.sh 1 vfat /mnt [test_file]"
> > +	die
> > +fi
> > +
> > +MNT_DIR=$3
> 
> I think here, we should assign all positional arguments to named 
> variables rather than using $1/... later on; something like:
> 
> PART_NUM=$1; shift
> FSTYPE=$1; shift
> MNT_DIR=$1; shift
> TEST_FILES=$@
> 

Ok.

> For MNT_DIR, can we simply create a temporary directory (e.g. 
> /mnt/tmp-ums-test-$$) so the user doesn't have to pass in the name?
> The script requires root after all.

Ok.

> 
> > +MEM_DEV=`dmesg | tail -n 10 | grep -E " sd[a-z]:" - | cut -d ':'
> > -f 1` +MEM_DEV=$(echo $MEM_DEV | cut -d ']' -f2 | tr -d ' ')
> 
> May as well use `` or $() consistently for those two lines.

According to the reply written below, we will not need this code.

> 
> This seems slightly dangerous; what if my system has been plugged in
> for a long time and I've plugged in some other USB storage device
> since. Better to take the device name on the command-line, or perhaps
> to take the USB VID/PID on the command-line, then scan sysfs for a
> USB device with matching VID/PID, and find out what device node is
> hosted by it.

Your proposition is more reliable. I think that the idProduct/idVendor
shall be passed to the script.

> 
> > \ No newline at end of file
> 
> Probably should fix that too.

Ok.

> 
> Can you add a trap handler so that if the user CTRL-C's the script,
> the disk is unmounted, the mount directory is removed (if you make
> the script create one internally), and any temporary files are
> deleted. Right now, cleanup only runs if the script successfully runs
> to the end.

Good idea. I will add this to v2.

-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group


More information about the U-Boot mailing list