mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-28 17:48:53 +00:00
f1b1dd26cf
Ideally, I'd like to disable expects's translation here, which does not work. The current setting is the result of testing all combinations.
76 lines
2.0 KiB
Plaintext
76 lines
2.0 KiB
Plaintext
##
|
|
# Get the output of the target machine via serial connection
|
|
#
|
|
# \param --log-serial-cmd Cmd that is executed to capture the output
|
|
# \param --log-serial-filter Sanitize output by piping it through a filter
|
|
#
|
|
|
|
source [genode_dir]/tool/run/log.inc
|
|
|
|
|
|
set default_serial_cmd "picocom -b 115200 /dev/ttyUSB0"
|
|
|
|
|
|
proc log_serial_cmd { } {
|
|
global default_serial_cmd
|
|
return [get_cmd_arg --log-serial-cmd $default_serial_cmd]
|
|
}
|
|
|
|
|
|
proc log_serial_filter { } {
|
|
return [get_cmd_arg --log-serial-filter ""]
|
|
}
|
|
|
|
|
|
##
|
|
# Log output of the test machine via serial device
|
|
#
|
|
proc run_log { wait_for_re timeout_value } {
|
|
global output_spawn_id
|
|
|
|
set kernel_msg [run_boot_string]
|
|
|
|
#
|
|
# Certain devices send garbage through the serial connection that may
|
|
# result in an unexpected EOF in expect. This is caused by TCL using the
|
|
# terminal encoding for the channel to the spawned program and interpreting
|
|
# the input for conversion to UTF-8. In the case of the serial connection,
|
|
# this may not be valid with garbage bytes in the character stream. If any
|
|
# garbage coming from the serial connection is interpreted as the beginning
|
|
# of a UTF-8 multi-byte sequence but does not resemble the complete
|
|
# sequence (i.e., is truncated), parsing may result in EOF. To prevent this
|
|
# from happening one may use a filter that sanitizes the serial output,
|
|
# i.e., lets only ASCII characters through.
|
|
#
|
|
set serial_cmd_chain [log_serial_cmd]
|
|
if {[get_cmd_switch --log-serial-filter]} {
|
|
set serial_cmd_chain "$serial_cmd_chain | [log_serial_filter]"
|
|
}
|
|
|
|
#
|
|
# XXX the initial timeout was estimated by testing and is merely enough
|
|
# to load large scenarios via TFTP.
|
|
#
|
|
set timeout 210
|
|
|
|
spawn /bin/sh -c "$serial_cmd_chain"
|
|
set output_spawn_id $spawn_id
|
|
fconfigure $output_spawn_id -translation { crlf lf }
|
|
|
|
expect {
|
|
-i $output_spawn_id $kernel_msg { }
|
|
eof {
|
|
puts stderr "Aborting, received EOF"
|
|
return false
|
|
}
|
|
timeout {
|
|
puts stderr "Boot process timed out"
|
|
close
|
|
return false
|
|
}
|
|
}
|
|
|
|
wait_for_output $wait_for_re $timeout_value $output_spawn_id
|
|
return true
|
|
}
|