mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-11 03:36:00 +00:00
Flashing issues have been resolved. The build system support for flashing and debugging has been changed back to UFM scenario. XIP and reset vector no longer disabled. Wiki documentation updated. Change-Id: Iffe326485c20808dabc1e19e0b18b7b60a83d797 Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
77 lines
2.0 KiB
Bash
Executable File
77 lines
2.0 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="quartus_cpf quartus_pgm 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() {
|
|
if [ -z "${NIOS2_CPU_SOF}" ]; then
|
|
echo "Please set NIOS2_CPU_SOF variable to location of CPU .sof data"
|
|
exit 1
|
|
fi
|
|
|
|
${ZEPHYR_BASE}/scripts/support/quartus-flash.py \
|
|
--sof ${NIOS2_CPU_SOF} \
|
|
--kernel ${HEX_NAME}
|
|
}
|
|
|
|
do_debug() {
|
|
do_debugserver 1 &
|
|
|
|
# connect to the GDB server
|
|
${GDB} ${TUI} ${ELF_NAME} -ex "target remote :${GDB_TCP_PORT}"
|
|
}
|
|
|
|
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} --stop --reset-target
|
|
}
|
|
|
|
|
|
CMD="$1"
|
|
shift
|
|
|
|
case "${CMD}" in
|
|
flash)
|
|
do_flash
|
|
;;
|
|
debugserver)
|
|
do_debugserver
|
|
;;
|
|
debug)
|
|
do_debug
|
|
;;
|
|
esac
|