scripts/contrib/serdevtry: add script to handle transient serial terminals

When running automated tests (or just generally interacting with)
boards whose serial console devices are on the board itself and thus
disappear when powered down or practically disconnected, such as the
BeagleBone white, some terminal programs (e.g. picocom) will exit when
the device disappears and need to be restarted after the serial device
returns. This script handles this automatically for such terminal
programs.

(From OE-Core rev: 0537269df779532245eb2954e04fc26b3edfed85)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2014-04-30 13:32:02 +01:00 committed by Richard Purdie
parent abdd8e708d
commit d20eedb18d
1 changed files with 60 additions and 0 deletions

60
scripts/contrib/serdevtry Executable file
View File

@ -0,0 +1,60 @@
#!/bin/sh
# Copyright (C) 2014 Intel Corporation
#
# Released under the MIT license (see COPYING.MIT)
if [ "$1" = "" -o "$1" = "--help" ] ; then
echo "Usage: $0 <serial terminal command>"
echo
echo "Simple script to handle maintaining a terminal for serial devices that"
echo "disappear when a device is powered down or reset, such as the USB"
echo "serial console on the original BeagleBone (white version)."
echo
echo "e.g. $0 picocom -b 115200 /dev/ttyUSB0"
echo
exit
fi
args="$@"
DEVICE=""
while [ "$1" != "" ]; do
case "$1" in
/dev/*)
DEVICE=$1
break;;
esac
shift
done
if [ "$DEVICE" != "" ] ; then
while true; do
if [ ! -e $DEVICE ] ; then
echo "serdevtry: waiting for $DEVICE to exist..."
while [ ! -e $DEVICE ]; do
sleep 0.1
done
fi
if [ ! -w $DEVICE ] ; then
# Sometimes (presumably because of a race with udev) we get to
# the device before its permissions have been set up
RETRYNUM=0
while [ ! -w $DEVICE ]; do
if [ "$RETRYNUM" = "2" ] ; then
echo "Device $DEVICE exists but is not writable!"
exit 1
fi
RETRYNUM=$((RETRYNUM+1))
sleep 0.1
done
fi
$args
if [ -e $DEVICE ] ; then
break
fi
done
else
echo "Unable to determine device node from command: $args"
exit 1
fi