[rtems-tools commit] Add a target start and target reset to manage boards that do not boot cleanly.

Chris Johns chrisj at rtems.org
Sat Oct 7 08:01:03 UTC 2017


Module:    rtems-tools
Branch:    master
Commit:    9580804ae56c9d428a4dc922a71ef33728b0966b
Changeset: http://git.rtems.org/rtems-tools/commit/?id=9580804ae56c9d428a4dc922a71ef33728b0966b

Author:    Chris Johns <chrisj at rtems.org>
Date:      Sat Oct  7 18:57:24 2017 +1100

Add a target start and target reset to manage boards that do not boot cleanly.

Rename the reset regex as start regex to detect a board has started.
Add a reset regex to detect if a board has failed to boot cleanly and
needs to be reset.

The Microzed I have can fail to boot. The PHY does not initalise.
I do not know if it is the board, the design or u-boot.

---

 tester/rt/config.py                               | 51 ++++++++++++++---------
 tester/rtems/testing/bsps/xilinx_zynq_zedboard.mc |  3 +-
 2 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/tester/rt/config.py b/tester/rt/config.py
index 455b175..5aadc61 100644
--- a/tester/rt/config.py
+++ b/tester/rt/config.py
@@ -75,6 +75,7 @@ class file(config.file):
         self.kill_on_end = False
         self.test_label = None
         self.target_reset_regx = None
+        self.target_start_regx = None
 
     def __del__(self):
         if self.console:
@@ -102,6 +103,17 @@ class file(config.file):
         except:
             pass
 
+    def _target_regex(self, label):
+        regex = None
+        if self.defined(label):
+            r = self.expand('%%{%s}' % (label))
+            try:
+                regex = re.compile(r, re.MULTILINE)
+            except:
+                msg = 'invalid target regex: %s: %s' % (label, r)
+                raise error.general(msg)
+        return regex
+
     def _target_reset(self):
         if self.defined('target_reset_command'):
             reset_cmd = self.expand('%{target_reset_command}').strip()
@@ -259,37 +271,38 @@ class file(config.file):
                 print(' '.join(l))
 
     def run(self):
-        if self.defined('target_reset_regex'):
-            try:
-                regex = self.expand('%{target_reset_regex}')
-                self.target_reset_regx = re.compile(regex, re.MULTILINE)
-            except:
-                msg = 'invalid target reset regex: %s' % (regex)
-                raise error.general(msg)
+        self.target_start_regx = self._target_regex('target_start_regex')
+        self.target_reset_regx = self._target_regex('target_reset_regex')
         self.load(self.name)
 
     def capture(self, text):
         if not self.test_started:
-            self.test_started = '*** BEGIN OF TEST ' in text
+            s = text.find('*** BEGIN OF TEST ')
+            if s >= 0:
+                self.test_started = True
+                e = text[s + 3:].find('***')
+                if e >= 0:
+                    self.test_label = text[s + len('*** BEGIN OF TEST '):s + e + 3 - 1]
+                self.capture_console('test start: %s' % (self.test_label))
         ok_to_kill = '*** TEST STATE: USER_INPUT' in text or \
                      '*** TEST STATE: BENCHMARK' in text
         if ok_to_kill:
             reset_target = True
         else:
             reset_target = False
-        if self.test_started and self.target_reset_regx is not None:
-            if self.target_reset_regx.match(text):
-                self.capture_console('target reset detected')
+        if self.test_started and self.target_start_regx is not None:
+            if self.target_start_regx.match(text):
+                self.capture_console('target start detected')
                 ok_to_kill = True
+        if not reset_target and self.target_reset_regx is not None:
+            if self.target_reset_regx.match(text):
+                self.capture_console('target reset condition detected')
+                reset_target = True
         if self.kill_on_end:
-            if self.test_label is None:
-                s = text.find('*** BEGIN OF TEST ')
-                if s >= 0:
-                    e = text[s + 3:].find('***')
-                    if e >= 0:
-                        self.test_label = text[s + len('*** BEGIN OF TEST '):s + e + 3 - 1]
-            if not ok_to_kill and self.test_label is not None:
-                ok_to_kill = '*** END OF TEST %s ***' % (self.test_label) in text
+            if not ok_to_kill and '*** END OF TEST ' in text:
+                self.capture_console('test end: %s' % (self.test_label))
+                if self.test_label is not None:
+                    ok_to_kill = '*** END OF TEST %s ***' % (self.test_label) in text
         text = [(']', l) for l in text.replace(chr(13), '').splitlines()]
         self._lock()
         if self.output is not None:
diff --git a/tester/rtems/testing/bsps/xilinx_zynq_zedboard.mc b/tester/rtems/testing/bsps/xilinx_zynq_zedboard.mc
index 5e457a4..2718640 100644
--- a/tester/rtems/testing/bsps/xilinx_zynq_zedboard.mc
+++ b/tester/rtems/testing/bsps/xilinx_zynq_zedboard.mc
@@ -54,5 +54,6 @@ xilinx_zynq_zedboard:      none,    none,   '%{_rtscripts}/tftp.cfg'
 xilinx_zynq_zedboard_arch: none,    none,   'arm'
 test_restarts:             none,    none,   '3'
 target_reset_command:      none,    none,   'wemo-reset CSEng1 3'
-target_reset_regex:        none,    none,   '^U-Boot SPL .*'
+target_reset_regex:        none,    none,   '^No ethernet found.*|BOOTP broadcast 9.*'
+target_start_regex:        none,    none,   '^U-Boot SPL .*'
 bsp_tty_dev:               none,    none,   'tuke:30005'



More information about the vc mailing list