Skip to content

Commit

Permalink
scripts: Add support for 'make debug' using Segger JLink on NXP boards
Browse files Browse the repository at this point in the history
Adds a new debug support script using Segger JLink and configures all
NXP boards so they can use it. Tested with Segger JLink GDB server
V6.14b and OpenSDA v2.1 firmware.

Change-Id: Ia1b297d9c93d21db61379e22f27ae54cda3ad461
Signed-off-by: Maureen Helm <[email protected]>
  • Loading branch information
MaureenHelm authored and galak committed May 10, 2017
1 parent 599149d commit 6191cd1
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 1 deletion.
4 changes: 3 additions & 1 deletion boards/arm/frdm_k64f/Makefile.board
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ DEBUG_SCRIPT = openocd.sh
OPENOCD_LOAD_CMD = "flash write_image erase ${O}/${KERNEL_BIN_NAME} ${CONFIG_FLASH_BASE_ADDRESS}"
OPENOCD_VERIFY_CMD = "verify_image ${O}/${KERNEL_BIN_NAME} ${CONFIG_FLASH_BASE_ADDRESS}"

export FLASH_SCRIPT OPENOCD_LOAD_CMD OPENOCD_VERIFY_CMD
JLINK_DEVICE = MK64FN1M0xxx12

export FLASH_SCRIPT OPENOCD_LOAD_CMD OPENOCD_VERIFY_CMD JLINK_DEVICE
5 changes: 5 additions & 0 deletions boards/arm/frdm_kl25z/Makefile.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
DEBUG_SCRIPT = jlink.sh

JLINK_DEVICE = MKL25Z128xxx4

export JLINK_DEVICE
5 changes: 5 additions & 0 deletions boards/arm/frdm_kw41z/Makefile.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
DEBUG_SCRIPT = jlink.sh

JLINK_DEVICE = MKW41Z512xxx4

export JLINK_DEVICE
5 changes: 5 additions & 0 deletions boards/arm/hexiwear_k64/Makefile.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
DEBUG_SCRIPT = jlink.sh

JLINK_DEVICE = MK64FN1M0xxx12

export JLINK_DEVICE
5 changes: 5 additions & 0 deletions boards/arm/hexiwear_kw40z/Makefile.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
DEBUG_SCRIPT = jlink.sh

JLINK_DEVICE = MKW40Z160xxx4

export JLINK_DEVICE
67 changes: 67 additions & 0 deletions scripts/support/jlink.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/bin/sh

# This script is loosly based on a script with same purpose provided
# by RIOT-OS (https://github.com/RIOT-OS/RIOT)

JLINK_GDBSERVER=${JLINK_GDBSERVER:-JLinkGDBServer}
JLINK_IF=${JLINK_IF:-swd}
BIN_NAME=${O}/${KERNEL_BIN_NAME}
ELF_NAME=${O}/${KERNEL_ELF_NAME}
GDB_PORT=${GDB_PORT:-2331}

test_config() {
if ! which ${JLINK_GDBSERVER} >/dev/null 2>&1; then
echo "Error: Unable to locate JLink GDB server: ${JLINK_GDBSERVER}"
exit 1
fi
}

test_bin() {
if [ ! -f "${BIN_NAME}" ]; then
echo "Error: Unable to locate image binary: ${BIN_NAME}"
exit 1
fi
}

do_debug() {
do_debugserver 1 &

# connect to the GDB server
${GDB} ${TUI} ${ELF_NAME} \
-ex "target remote :${GDB_PORT}" \
-ex 'monitor halt' \
-ex 'load' \
-ex 'monitor reset'
}

do_debugserver() {
test_config

# 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 "JLink GDB server running on port ${GDB_PORT}"
${SETSID} ${JLINK_GDBSERVER} \
-port ${GDB_PORT} \
-if ${JLINK_IF} \
-device ${JLINK_DEVICE} \
-singlerun
}

CMD="$1"
shift

case "${CMD}" in
debugserver)
do_debugserver "$@"
;;
debug)
do_debug "$@"
;;
esac

0 comments on commit 6191cd1

Please sign in to comment.