genode/tool/run/log/serial

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
}