runtest

来自「RTEMS (Real-Time Executive for Multiproc」· 代码 · 共 354 行

TXT
354
字号
#! /bin/sh -p## Run rtems tests on the Motorola MCF5206eLITE Coldfire Evaluation board# using gdb configured with P&E Micro Background Debug Mode debugging# interface.## This program generates a gdb script to run each test, intercept# serial port output and put log into output file.## Author: Victor V. Vengerov <vvv@oktet.ru># Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia## Partially based on runtest script for powerpc psim.##  COPYRIGHT (c) 1989-1999.#  On-Line Applications Research Corporation (OAR).##  The license and distribution terms for this file may be#  found in found in the file LICENSE in this distribution or at#  http://www.rtems.com/license/LICENSE.##  @(#) $Id: runtest,v 1.1.4.2 2003/09/04 18:44:30 joel Exp $## progname=`basename $0`progname=${0##*/}        # fast basename hack for ksh, bashUSAGE=\"usage: $progname [ -opts ] test [ test ... ]	-s ttydevice -- specify serial device to be used to capture test                        output        -r baud      -- set serial port baud rate (19200 by default)        -b bdmdevice -- specify BDM device to be used to control the target        -g gdbname   -- specify name of gdb program to be used        -v           -- verbose output        -d           -- don't remove temporary files (for debugging only)        -i           -- use interrupt driven console I/O when test is running                        (many tests failed when interrupt driven console                        input/output is used due undetermenistic tests                        behaviour)        -p           -- use termios poll console I/O        -l logdir    -- specify log directory (default is 'logdir')  Specify test as 'test' or 'test.exe'.  All multiprocessing tests *must* be specified simply as 'mp01', etc."# export everythingset -a#   log an error to stderrprerr(){    echo "$*" >&2}fatal() {    [ "$1" ] && prerr $*    prerr "$USAGE"    exit 1}warn() {    [ "$1" ] && prerr $*}# run at normal and signalled exittest_exit(){    exit_code=$1    rm -f ${logfile}.tmp*    [ "$gdb_pid" ] && kill -9 $gdb_pid    [ "$serial_pid" ] && kill -9 $serial_pid    exit $exit_code}## process the options## defaults for getopt vars## max_run_time is defaulted to 5 minutes#verbose=""serial_device=/dev/ttyS0bdm_device=/dev/bdmcf0gdbprog=truefor i in rtems bdm-rtems bdm bdm-elf bdm-coff ; do    if m68k-$i-gdb --version > /dev/null 2>&1 ; then        gdbprog=m68k-$i-gdb ;        break ;    fidonelogdir=logmax_run_time=$((5 * 60))sizeof_ram=$((1 * 1024 * 1024))debugging="no"baudrate="19200"console_mode=0while getopts vdips:r:b:l: OPTdo    case "$OPT" in	v)	    verbose="yes";;        d)            debugging="yes";;        s)            serial_device="$OPTARG";;        r)            baudrate="$OPTARG";;        b)            bdm_device="$OPTARG";;        l)            logdir="$OPTARG";;        s)            gdbprog="$OPTARG";;        p)            console_mode=1;;        i)            console_mode=2;;        *)            fatal;;    esacdonelet $((shiftcount = $OPTIND - 1))shift $shiftcountargs=$*## Run the tests#tests="$args"if [ ! "$tests" ]then     set -- `echo *.exe`     tests="$*"fi[ -d $logdir ] ||  mkdir $logdir || fatal "could not create log directory ($logdir)"# where the tmp files gotrap "test_exit" 1 2 3 13 14 15for tfile in $testsdo   tname=`basename $tfile .exe`   cpus="1"   TEST_TYPE="single"   case "$tname" in       # size is no longer interactive.       monitor* | termios* | fileio*)            warn "Skipping $tname; it is interactive"            continue            ;;       *-node2*)           warn "Skipping $tname; 'runtest' runs both nodes when for *-node1"           continue           ;;       *-node1*)           warn "Running both nodes associated with $tname"           tname=`echo $tname | sed 's/-node.*//'`           TEST_TYPE="mp"           ;;       minimum*|stackchk*|spfatal*|malloctest*)           continue           ;;   esac   if [ "$TEST_TYPE" = "mp" ] ; then       fatal "MP tests not supported for this board"   fi   if [ $TEST_TYPE = "single" ] ; then     logfile=$logdir/${tname}     infofile=${logfile}.info     scriptfile=${logfile}.ss     gdblogfile=${logfile}.gdb     rm -f ${logfile}.tmp*     date=`date`     echo "Starting $tname at $date"     # Set serial port parameters     if ! stty -F ${serial_device} raw cs8 -cstopb cread crtscts \                    ispeed ${baudrate} ospeed ${baudrate} \                    > /dev/null 2> /dev/null ; then         fatal "Serial port couldn't be configured"     fi     # Flush serial port     cat ${serial_device} > /dev/null &     serial_pid=$!     sleep 1s     kill ${serial_pid}     # Capture serial port     cat ${serial_device} > $logfile &     serial_pid=$!     cat > "${scriptfile}" <<EOFtarget bdm $bdm_deviceset \$mbar  = 0x10000001set \$csar0 = \$mbar - 1 + 0x064set \$csmr0 = \$mbar - 1 + 0x068set \$cscr0 = \$mbar - 1 + 0x06Eset \$csar1 = \$mbar - 1 + 0x070set \$csmr1 = \$mbar - 1 + 0x074set \$cscr1 = \$mbar - 1 + 0x07Aset \$csar2 = \$mbar - 1 + 0x07Cset \$csmr2 = \$mbar - 1 + 0x080set \$cscr2 = \$mbar - 1 + 0x086set \$csar3 = \$mbar - 1 + 0x088set \$csmr3 = \$mbar - 1 + 0x08Cset \$cscr3 = \$mbar - 1 + 0x092set \$csar4 = \$mbar - 1 + 0x094set \$csmr4 = \$mbar - 1 + 0x098set \$cscr4 = \$mbar - 1 + 0x09Eset \$csar5 = \$mbar - 1 + 0x0A0set \$csmr5 = \$mbar - 1 + 0x0A4set \$cscr5 = \$mbar - 1 + 0x0AAset \$csar6 = \$mbar - 1 + 0x0ACset \$csmr6 = \$mbar - 1 + 0x0B0set \$cscr6 = \$mbar - 1 + 0x0B6set \$csar7 = \$mbar - 1 + 0x0B8set \$csmr7 = \$mbar - 1 + 0x0BCset \$cscr7 = \$mbar - 1 + 0x0C2#  set *((short*) \$csar0) = 0xffe0set *((int*)   \$csmr0) = 0x000f0000set *((short*) \$cscr0) = 0x1da3set *((short*) \$csar1) = 0x5000set *((int*)   \$csmr1) = 0x00000000set *((short*) \$cscr1) = 0x3d43set *((short*) \$csar2) = 0x3000set *((int*)   \$csmr2) = 0x000f0000set *((short*) \$cscr2) = 0x1903set *((short*) \$csar3) = 0x4000set *((int*)   \$csmr3) = 0x000f0000set *((short*) \$cscr3) = 0x0083#load# Many tests not working properly when interrupt driven console I/O is used.set console_mode=$console_modeset \$pc=startset \$sp=0x20001ffc#break bsp_cleanupcommandsshell kill $serial_pidquitend#break _stopcommandsshell kill $serial_pidquit 1end#continuequit 2EOF     ${gdbprog} -x "${scriptfile}" "${tfile}" > "${gdblogfile}"  2>&1 &     gdb_pid=$!     {         time_run=0         while [ $time_run -lt $max_run_time ] ; do             sleep 10s             if kill -0 $gdb_pid 2> /dev/null ; then                 time_run=$((time_run+10)) ;             else                 exit 0             fi         done         kill -2 $serial_pid 2> /dev/null         kill -2 $gdb_pid 2> /dev/null         {             sleep 5s ;              if kill -0 $gdb_pid 2> /dev/null ; then                 kill -9 $gdb_pid 2> /dev/null ;             fi             if kill -0 $serial_pid 2> /dev/null ; then                 kill -9 $serial_pid 2> /dev/null ;             fi         } &     } &     wait $gdb_pid     gdb_status=$?     {         if kill -0 $serial_pid 2> /dev/null ; then             kill $serial_pid 2> /dev/null ;         fi         sleep 5s ;         if kill -0 $serial_pid 2> /dev/null ; then             kill -9 $serial_pid 2> /dev/null ;         fi     } &     if [ $gdb_status -ge 128 ] ; then         ran_too_long="yes" ;     else         ran_too_long="no"     fi     if [ $gdb_status -ne 0 ] ; then         test_failed="yes" ;     else         test_failed="no"     fi     gdb_pid=""     serial_pid=""   fi   # Create the info files   {       echo "$date"       echo "Test run on: `uname -n`"       echo "Host Information:"       echo `uname -a`       echo       echo "Serial port: ${serial_device}"       echo "Baud rate:   ${baudrate}"       echo "BDM port:    ${bdm_device}"       echo "gdb:         `type -path ${gdbprog}`"       cat ${logfile}       if [ "$test_failed" = "yes" ] ; then           echo -e "\\n\\nTest did not finish normally"           if [ "$ran_too_long" = "yes" ] ; then               echo "Test killed after $max_run_time seconds"           fi       fi       echo       date;   } > ${infofile}   if [ "${debugging}" = "no" ] ; then       rm -f ${scriptfile}       rm -f ${gdblogfile}   fidoneecho "Tests completed at " `date`test_exit 0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?