zephyr/scripts/support/nios2.sh
Andrew Boie 50131a3d0e altera_max10: support 'make flash' and 'make debug'
For both of these, we send the .elf binary over the JTAG and it gets
written directly into SRAM. The CPU boots the image from the entry
point (__start).

This does not provision the kernel onto device's User Flash Memory
(UFM). Implementation of this is still in progress see ZEP-273.

Change-Id: Iae8188a21e4a3eecfda0f4f0bb220c0607d719cb
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2016-07-12 18:09:57 +00:00

70 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
set -e
HEX_NAME=${O}/${KERNEL_HEX_NAME}
ELF_NAME=${O}/${KERNEL_ELF_NAME}
# XXX nios2-gdb-server doesn't seem to clean up after itself properly,
# and often will report "Unable to bind (98)" when restarting a session.
# Eventually the kernel cleans things up, but it takes a couple minutes.
# Use a random port each time so this doesn't annoy users. Use netstat to
# confirm that the randomly selected port isn't being used.
GDB_TCP_PORT=
while [ -z "$GDB_TCP_PORT" ]; do
GDB_TCP_PORT=$(shuf -i1024-49151 -n1)
netstat -atn | grep "127[.]0[.]0[.]1[:]$GDB_TCP_PORT" || break
GDB_TCP_PORT=
done
REQUIRED_PROGRAMS="nios2-gdb-server nios2-download"
for pgm in ${REQUIRED_PROGRAMS}; do
type -P $pgm > /dev/null 2>&1 || { echo >&2 "$pgm not found in PATH"; exit 1; }
done
# XXX do_flash() and do_debug() only support cases where the .elf is sent
# over the JTAG and the CPU directly boots from __start. CONFIG_XIP and
# CONFIG_INCLUDE_RESET_VECTOR must be disabled.
do_flash() {
nios2-download --go ${ELF_NAME}
}
do_debug() {
do_debugserver 1 &
# connect to the GDB server
${GDB} ${TUI} -ex "target remote :${GDB_TCP_PORT}" -ex "load" ${ELF_NAME}
}
do_debugserver() {
# Calling with an arg will result in setsid being used, which will prevent
# Ctrl-C in GDB from killing the server. The server automatically exits
# when the remote GDB disconnects.
if [ -n "$1" ]; then
SETSID=/usr/bin/setsid
else
SETSID=
fi
echo "Nios II GDB server running on port ${GDB_TCP_PORT}"
${SETSID} nios2-gdb-server --tcpport ${GDB_TCP_PORT} --init-cache --reset-target
}
CMD="$1"
shift
case "${CMD}" in
flash)
do_flash
;;
debugserver)
do_debugserver
;;
debug)
do_debug
;;
esac