commit 0cb18eabcd1b06f17cb094094dbd796ef8badd22 parent 24151425b8dcc9347f73ce5671992fe024dbddbe Author: Daniel Barlow <dan@telent.net> Date: Fri, 27 Dec 2024 18:08:01 +0000 boot.expect: improve reliability don't depend on seeing u-boot prompt, it's just too easy to get out of sync Diffstat:
| M | boot.expect | | | 36 | +++++++++++++++++++++++++++--------- |
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/boot.expect b/boot.expect @@ -2,19 +2,37 @@ # use expect as its "Script program" instead of runscript. Try # Ctrl+A O -> Filenames and paths -> D +fconfigure stderr -buffering none +fconfigure stdout -buffering none + +proc waitprompt { } { + expect { + "BusyBox" { puts stderr "DONE\r"; exit 0 } + "READY" { puts stderr ";;; READY\r"; } + timeout { puts stderr ";;; timed out waiting after $line\r" } + } +} + +proc sendline { line } { + send "$line; echo \$ready \r" +} + log_user 0 log_file -a -open stderr + set f [open "result/boot.scr"] -send "version\r" -set timeout 60 + +send "setenv ready REA\rsetenv ready \${ready}DY\r" + +set timeout 300 +expect_before timeout abort while {[gets $f line] >= 0} { - puts stderr "next line $line\r" - puts stderr "waiting for prompt\r" - expect { - "ath>" {} - "BusyBox" { puts stderr "DONE"; exit 0 } - } - send "$line\r\n" + puts stderr ";;; next line $line\r" + puts stderr ";;; waiting for prompt\r" + puts stderr ";;; sending\r" + sendline $line + waitprompt } + puts stderr "done\r\n" close $f \ No newline at end of file