53 lines
1.2 KiB
Plaintext
53 lines
1.2 KiB
Plaintext
##
|
|
# Load image to target hardware via JTAG
|
|
#
|
|
# \param --load-jtag-debugger Debugger used
|
|
# \param --load-jtag-board Set the used board
|
|
#
|
|
|
|
source [genode_dir]/tool/run/load.inc
|
|
|
|
|
|
proc load_jtag_debugger { } { return [get_cmd_arg --load-jtag-debugger 1] }
|
|
|
|
|
|
proc load_jtag_board { } { return [get_cmd_arg --load-jtag-board 1] }
|
|
|
|
|
|
proc run_load { } {
|
|
global load_spawn_id
|
|
|
|
if {![have_spec arm] || ![have_installed openocd]} {
|
|
puts "No support for JTAG detected."
|
|
exit -1
|
|
}
|
|
|
|
set debugger [load_jtag_debugger]
|
|
set board [load_jtag_board]
|
|
set elf_img "[run_dir]/image.elf"
|
|
|
|
# sleep a bit, board might need some time to come up
|
|
sleep 8
|
|
|
|
# parse ELF entrypoint
|
|
set entrypoint [exec [cross_dev_prefix]readelf -h $elf_img | \
|
|
grep "Entry point address: " | \
|
|
sed -e "s/.*Entry point address: *//"]
|
|
|
|
eval spawn openocd -f $debugger -f $board -c init -c halt \
|
|
-c \"load_image $elf_img\" -c \"resume $entrypoint\"
|
|
set load_spawn_id $spawn_id
|
|
set timeout 360
|
|
expect {
|
|
"downloaded" { return true; }
|
|
eof {
|
|
puts stderr "openocd command process died unexpectedly";
|
|
return false;
|
|
}
|
|
timeout {
|
|
puts stderr "Loading timed out";
|
|
return false;
|
|
}
|
|
}
|
|
}
|