Browse Source

add first implementation of target support, works fine with Mikrotik RB532 connected to a Powerswitch (controlled via sispmctl)

Waldemar Brodkorb 9 years ago
parent
commit
a8089d167e
1 changed files with 158 additions and 88 deletions
  1. 158 88
      embedded-test.sh

+ 158 - 88
embedded-test.sh

@@ -39,6 +39,9 @@ giturl=http://git.openadk.org/openadk.git
 valid_libc="uclibc-ng musl glibc newlib"
 valid_libc="uclibc-ng musl glibc newlib"
 valid_tests="toolchain boot libc ltp mksh native"
 valid_tests="toolchain boot libc ltp mksh native"
 
 
+bootserver=10.0.0.1
+buildserver=10.0.0.2
+
 tools='make git wget xz cpio tar awk sed'
 tools='make git wget xz cpio tar awk sed'
 f=0
 f=0
 for tool in $tools; do
 for tool in $tools; do
@@ -56,9 +59,10 @@ help() {
 Syntax: $0 [ --libc=<libc> --arch=<arch> --test=<test> ]
 Syntax: $0 [ --libc=<libc> --arch=<arch> --test=<test> ]
 
 
 Explanation:
 Explanation:
-	--libc=<libc>                c library to use (${valid_libc})
+	--libc=<libc>                C library to use (${valid_libc})
 	--arch=<arch>                architecture to check (otherwise all supported)
 	--arch=<arch>                architecture to check (otherwise all supported)
 	--skiparch=<arch>            architectures to skip when all choosen
 	--skiparch=<arch>            architectures to skip when all choosen
+	--targets=<targets.txt>      a list of remote targets to test via nfsroot or chroot
 	--test=<test>                run test (${valid_tests}), default toolchain
 	--test=<test>                run test (${valid_tests}), default toolchain
 	--libc-source=<dir>          use directory with source for C library
 	--libc-source=<dir>          use directory with source for C library
 	--gcc-source=<dir>           use directory with source for gcc
 	--gcc-source=<dir>           use directory with source for gcc
@@ -102,6 +106,7 @@ while [[ $1 != -- && $1 = -* ]]; do case $1 {
   (--libc=*) libc=${1#*=}; shift ;;
   (--libc=*) libc=${1#*=}; shift ;;
   (--arch=*) archs=${1#*=}; shift ;;
   (--arch=*) archs=${1#*=}; shift ;;
   (--skiparch=*) skiparchs=${1#*=}; shift ;;
   (--skiparch=*) skiparchs=${1#*=}; shift ;;
+  (--targets=*) targets=${1#*=}; shift ;;
   (--test=*) test=${1#*=}; shift ;;
   (--test=*) test=${1#*=}; shift ;;
   (--libc-source=*) libcsource=${1#*=}; shift ;;
   (--libc-source=*) libcsource=${1#*=}; shift ;;
   (--gcc-source=*) gccsource=${1#*=}; shift ;;
   (--gcc-source=*) gccsource=${1#*=}; shift ;;
@@ -118,6 +123,10 @@ while [[ $1 != -- && $1 = -* ]]; do case $1 {
   (-*) help ;;
   (-*) help ;;
 }; done
 }; done
 
 
+if [ ! -z $targets ]; then
+  targetmode=1
+fi
+
 if [ -z "$libc" ]; then
 if [ -z "$libc" ]; then
   if [[ $libcversion ]]; then
   if [[ $libcversion ]]; then
     echo "You can not use a specific C library version without setting the C library"
     echo "You can not use a specific C library version without setting the C library"
@@ -670,6 +679,80 @@ get_arch_info() {
   esac
   esac
 }
 }
 
 
+# creating test script to be run on boot
+create_run_sh() {
+  test=$1
+  file=$2
+  type=$3
+
+  if [ "$type" = "netcat" ]; then
+    tee="| tee REPORT"
+  fi
+
+cat > $file << EOF
+#!/bin/sh
+uname -a
+if [ \$ntpserver ]; then
+  rdate \$ntpserver
+else
+  rdate time.fu-berlin.de
+fi
+EOF
+
+  # boot test
+  if [ $test = "boot" ]; then
+cat >> $file << EOF
+file /bin/busybox
+size /bin/busybox
+for i in \$(ls /lib/*.so|grep -v libgcc);do
+  size \$i
+done
+EOF
+  fi
+  # ltp test
+  if [ $test = "ltp" ]; then
+cat >> $file << EOF
+/opt/ltp/runltp
+EOF
+  fi
+  # mksh test
+  if [ $test = "mksh" ]; then
+cat >> $file << EOF
+mksh /opt/mksh/test.sh
+EOF
+  fi
+  # libc test
+  if [ $test = "libc" ]; then
+    case $lib in
+      uclibc-ng)
+cat >> $file << EOF
+cd /opt/uclibc-ng/test
+sh ./uclibcng-testrunner.sh $tee
+EOF
+      ;;
+      musl|glibc)
+cat >> $file << EOF
+cd /opt/libc-test
+CC=: make run
+EOF
+      ;;
+    esac
+  fi
+
+  if [ "$type" = "netcat" ]; then
+cat >> $file << EOF
+echo quit|nc $buildserver 9999
+EOF
+  fi
+
+  if [ "$type" = "quit" ]; then
+cat >> $file << EOF
+exit
+EOF
+  fi
+  chmod u+x ${root}/run.sh
+}
+
 runtest() {
 runtest() {
   lib=$1
   lib=$1
   arch=$2
   arch=$2
@@ -750,62 +833,7 @@ runtest() {
     tar -xf $archive -C $root
     tar -xf $archive -C $root
   fi
   fi
 
 
-  # creating test script to be run on boot
-cat > ${root}/run.sh << EOF
-#!/bin/sh
-uname -a
-if [ \$ntpserver ]; then
-  rdate \$ntpserver
-else
-  rdate time.fu-berlin.de
-fi
-EOF
-
-  # boot test
-  if [ $test = "boot" ]; then
-cat >> ${root}/run.sh << EOF
-file /bin/busybox
-size /bin/busybox
-for i in \$(ls /lib/*.so|grep -v libgcc);do
-  size \$i
-done
-exit
-EOF
-  fi
-  # ltp test
-  if [ $test = "ltp" ]; then
-cat >> ${root}/run.sh << EOF
-/opt/ltp/runltp
-exit
-EOF
-  fi
-  # mksh test
-  if [ $test = "mksh" ]; then
-cat >> ${root}/run.sh << EOF
-mksh /opt/mksh/test.sh
-exit
-EOF
-  fi
-  # libc test
-  if [ $test = "libc" ]; then
-    case $lib in
-      uclibc-ng)
-cat >> ${root}/run.sh << EOF
-cd /opt/uclibc-ng/test
-sh ./uclibcng-testrunner.sh
-exit
-EOF
-      ;;
-      musl|glibc)
-cat >> ${root}/run.sh << EOF
-cd /opt/libc-test
-CC=: make run
-exit
-EOF
-      ;;
-    esac
-  fi
-  chmod u+x ${root}/run.sh
+  create_run_sh $test ${root}/run.sh quit
 
 
   if [ $piggyback -eq 1 ]; then
   if [ $piggyback -eq 1 ]; then
     (cd openadk && make v)
     (cd openadk && make v)
@@ -825,15 +853,15 @@ EOF
   case $emulator in
   case $emulator in
     qemu)
     qemu)
       echo "${qemu} -M ${qemu_machine} ${qemu_args} -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot"
       echo "${qemu} -M ${qemu_machine} ${qemu_args} -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot"
-      ${qemu} -M ${qemu_machine} ${qemu_args} -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot | tee REPORT.${arch}.${test}.${libver}
+      ${qemu} -M ${qemu_machine} ${qemu_args} -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot | tee REPORT.${arch}.${emulator}.${test}.${libver}
       ;;
       ;;
     nsim)
     nsim)
       echo "./openadk/scripts/nsim.sh ${arch} ${kernel}"
       echo "./openadk/scripts/nsim.sh ${arch} ${kernel}"
-      ./openadk/scripts/nsim.sh ${arch} ${kernel} | tee REPORT.${arch}.${test}.${libver}
+      ./openadk/scripts/nsim.sh ${arch} ${kernel} | tee REPORT.${arch}.${emulator}.${test}.${libver}
       ;;
       ;;
   esac
   esac
   if [ $? -eq 0 ]; then
   if [ $? -eq 0 ]; then
-    echo "Test ${test} for ${arch} finished. See REPORT.${arch}.${test}.${libver}"
+    echo "Test ${test} for ${arch} finished. See REPORT.${arch}.${emulator}.${test}.${libver}"
   else
   else
     echo "Test ${test} failed for ${arch} with ${lib} ${libver}."
     echo "Test ${test} failed for ${arch} with ${lib} ${libver}."
   fi
   fi
@@ -843,14 +871,22 @@ build() {
   lib=$1
   lib=$1
   arch=$2
   arch=$2
   test=$3
   test=$3
+  system=$4
+  rootfs=$5
 
 
-  get_arch_info $arch $lib
   cd openadk
   cd openadk
 
 
-  DEFAULT="ADK_TARGET_LIBC=$lib"
+  if [[ $targetmode ]]; then
+    DEFAULT="ADK_APPLIANCE=test ADK_TARGET_ARCH=$arch ADK_TARGET_SYSTEM=$system ADK_TARGET_FS=$rootfs"
+  else
+    get_arch_info $arch $lib
+  fi
+
   if [ $debug -eq 1 ]; then
   if [ $debug -eq 1 ]; then
     DEFAULT="$DEFAULT ADK_VERBOSE=1"
     DEFAULT="$DEFAULT ADK_VERBOSE=1"
   fi
   fi
+
+  # build defaults for different tests
   if [ $test = "boot" ]; then
   if [ $test = "boot" ]; then
     DEFAULT="$DEFAULT ADK_TEST_BASE=y"
     DEFAULT="$DEFAULT ADK_TEST_BASE=y"
   fi
   fi
@@ -888,6 +924,9 @@ build() {
         ;;
         ;;
     esac
     esac
   fi
   fi
+
+  # build defaults for different C library
+  DEFAULT="$DEFAULT ADK_TARGET_LIBC=$lib"
   case $lib in
   case $lib in
     uclibc-ng)
     uclibc-ng)
       DEFAULT="$DEFAULT $default_uclibc_ng"
       DEFAULT="$DEFAULT $default_uclibc_ng"
@@ -1001,38 +1040,69 @@ for lib in ${libc}; do
     echo "completely cleaning openadk build directory"
     echo "completely cleaning openadk build directory"
     (cd openadk && make cleandir)
     (cd openadk && make cleandir)
   fi
   fi
-  for arch in ${archlist}; do
-    get_arch_info $arch $lib
-    if [ $cont -eq 1 ]; then
-      if [ -f "REPORT.${arch}.${test}.${libver}" ]; then
-        echo "Skipping already run test $test for $arch and $lib"
+
+  if [[ $targetmode ]]; then
+    create_run_sh $test run.sh netcat
+
+    while read line; do
+      target_host=$(echo $line|cut -f 1 -d ,)
+      target_ip=$(echo $line|cut -f 2 -d ,)
+      target_arch=$(echo $line|cut -f 3 -d ,)
+      target_system=$(echo $line|cut -f 4 -d ,)
+      target_suffix=$(echo $line|cut -f 5 -d ,)
+      target_rootfs=$(echo $line|cut -f 6 -d ,)
+      target_powerid=$(echo $line|cut -f 7 -d ,)
+      echo "Testing target system $target_system ($target_arch) with $target_rootfs on $target_host"
+      build $lib $target_arch $test $target_system $target_rootfs
+      kernel=openadk/firmware/${target_system}_${lib}_${target_suffix}/${target_system}-${target_rootfs}-kernel
+      tarball=openadk/firmware/${target_system}_${lib}_${target_suffix}/${target_system}-${lib}-${target_rootfs}.tar.xz
+      scp $kernel root@${bootserver}:/tftpboot/${target_host}
+      ssh root@${bootserver} "cd /tftpboot; ln -sf ${target_host} vmlinux"
+      ssh root@${bootserver} "mkdir /nfsroot/${target_host}"
+      xzcat $tarball | ssh root@${bootserver} "tar -xvf - -C /nfsroot/${target_host}"
+      scp run.sh root@${bootserver}:/nfsroot/${target_host}
+      echo "Powering on target system"
+      ssh root@${bootserver} "sispmctl -o $target_powerid"
+      echo "Waiting for target system to finish"
+      nc -l -p 9999
+      echo "Test finished. Powering off target system"
+      ssh root@${bootserver} "sispmctl -f $target_powerid"
+      scp root@${bootserver}:/nfsroot/${target_host}/REPORT REPORT.${target_arch}.${target_system}.${test}.${libver}
+    done < $targets
+  else
+    for arch in $archlist; do
+      get_arch_info $arch $lib
+      if [ $cont -eq 1 ]; then
+        if [ -f "REPORT.${arch}.${test}.${libver}" ]; then
+          echo "Skipping already run test $test for $arch and $lib"
+          continue
+        fi
+      fi
+      if [ "$arch" = "$skiparchs" ]; then
+        echo "Skipping $skiparchs"
         continue
         continue
       fi
       fi
-    fi
-    if [ "$arch" = "$skiparchs" ]; then
-      echo "Skipping $skiparchs"
-      continue
-    fi
-    if [[ "$allowed_tests" = *${test}* ]]; then
-      if [[ "$allowed_libc" = *${lib}* ]]; then
-        echo "Compiling for $lib and $arch testing $test"
-        build $lib $arch $test
-        if [ "$test" != "toolchain" ]; then
-          if [[ "$runtime_test" = *${lib}* ]]; then
-            runtest $lib $arch $test
-          else
-            # fake stamp for continue
-            touch REPORT.${arch}.${test}.${libver}
-            echo "runtime test disabled."
+      if [[ "$allowed_tests" = *${test}* ]]; then
+        if [[ "$allowed_libc" = *${lib}* ]]; then
+          echo "Compiling for $lib and $arch testing $test"
+          build $lib $arch $test
+          if [ "$test" != "toolchain" ]; then
+            if [[ "$runtime_test" = *${lib}* ]]; then
+              runtest $lib $arch $test
+            else
+              # fake stamp for continue
+              touch REPORT.${arch}.${test}.${libver}
+              echo "runtime test disabled."
+            fi
           fi
           fi
+        else
+          echo "$lib not available for $arch"
         fi
         fi
       else
       else
-        echo "$lib not available for $arch"
+         echo "$test not available for $arch and $lib"
       fi
       fi
-    else
-       echo "$test not available for $arch and $lib"
-    fi
-  done
+    done
+  fi
 done
 done
 echo "All tests finished."
 echo "All tests finished."
 exit 0
 exit 0