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 + -
显示快捷键?