diff --git a/dist/tools/openocd/openocd.sh b/dist/tools/openocd/openocd.sh index babf0bb224..14de9fd164 100755 --- a/dist/tools/openocd/openocd.sh +++ b/dist/tools/openocd/openocd.sh @@ -66,6 +66,10 @@ : ${OPENOCD_CONFIG:=${RIOTBOARD}/${BOARD}/dist/openocd.cfg} # Default OpenOCD command : ${OPENOCD:=openocd} +# Extra board initialization commands to pass to OpenOCD +: ${OPENOCD_EXTRA_INIT:=} +# Debugger interface initialization commands to pass to OpenOCD +: ${OPENOCD_ADAPTER_INIT:=} # The setsid command is needed so that Ctrl+C in GDB doesn't kill OpenOCD : ${SETSID:=setsid} # GDB command, usually a separate command for each platform (e.g. arm-none-eabi-gdb) @@ -152,7 +156,9 @@ do_flash() { fi fi # flash device - sh -c "${OPENOCD} -f '${OPENOCD_CONFIG}' \ + sh -c "${OPENOCD} \ + ${OPENOCD_ADAPTER_INIT} \ + -f '${OPENOCD_CONFIG}' \ ${OPENOCD_EXTRA_INIT} \ -c 'tcl_port 0' \ -c 'telnet_port 0' \ @@ -186,7 +192,9 @@ do_debug() { # don't trap on Ctrl+C, because GDB keeps running trap '' INT # start OpenOCD as GDB server - ${SETSID} sh -c "${OPENOCD} -f '${OPENOCD_CONFIG}' \ + ${SETSID} sh -c "${OPENOCD} \ + ${OPENOCD_ADAPTER_INIT} \ + -f '${OPENOCD_CONFIG}' \ ${OPENOCD_EXTRA_INIT} \ -c 'tcl_port ${TCL_PORT}' \ -c 'telnet_port ${TELNET_PORT}' \ @@ -211,7 +219,9 @@ do_debug() { do_debugserver() { test_config # start OpenOCD as GDB server - sh -c "${OPENOCD} -f '${OPENOCD_CONFIG}' \ + sh -c "${OPENOCD} \ + ${OPENOCD_ADAPTER_INIT} \ + -f '${OPENOCD_CONFIG}' \ ${OPENOCD_EXTRA_INIT} \ -c 'tcl_port ${TCL_PORT}' \ -c 'telnet_port ${TELNET_PORT}' \ @@ -224,7 +234,9 @@ do_debugserver() { do_reset() { test_config # start OpenOCD and invoke board reset - sh -c "${OPENOCD} -f '${OPENOCD_CONFIG}' \ + sh -c "${OPENOCD} \ + ${OPENOCD_ADAPTER_INIT} \ + -f '${OPENOCD_CONFIG}' \ ${OPENOCD_EXTRA_INIT} \ -c 'tcl_port 0' \ -c 'telnet_port 0' \ diff --git a/makefiles/tools/openocd-adapters/README.md b/makefiles/tools/openocd-adapters/README.md new file mode 100644 index 0000000000..b9d2bdd08c --- /dev/null +++ b/makefiles/tools/openocd-adapters/README.md @@ -0,0 +1,2 @@ +This directory contains definitions of debugger hardware interfaces to be used +by the OpenOCD integration. diff --git a/makefiles/tools/openocd-adapters/dap.inc.mk b/makefiles/tools/openocd-adapters/dap.inc.mk new file mode 100644 index 0000000000..c93fc61a9f --- /dev/null +++ b/makefiles/tools/openocd-adapters/dap.inc.mk @@ -0,0 +1,7 @@ +# CMSIS DAP debug adapter +OPENOCD_ADAPTER_INIT ?= -c 'source [find interface/cmsis-dap.cfg]' +# Add serial matching command, only if DEBUG_ADAPTER_ID was specified +ifneq (,$(DEBUG_ADAPTER_ID)) + OPENOCD_ADAPTER_INIT += -c 'cmsis_dap_serial $(DEBUG_ADAPTER_ID)' +endif +export OPENOCD_ADAPTER_INIT diff --git a/makefiles/tools/openocd-adapters/jlink.inc.mk b/makefiles/tools/openocd-adapters/jlink.inc.mk new file mode 100644 index 0000000000..c57e0119d7 --- /dev/null +++ b/makefiles/tools/openocd-adapters/jlink.inc.mk @@ -0,0 +1,7 @@ +# Segger J-Link debug adapter +OPENOCD_ADAPTER_INIT ?= -c 'source [find interface/jlink.cfg]' +# Add serial matching command, only if DEBUG_ADAPTER_ID was specified +ifneq (,$(DEBUG_ADAPTER_ID)) + OPENOCD_ADAPTER_INIT += -c 'jlink serial $(DEBUG_ADAPTER_ID)' +endif +export OPENOCD_ADAPTER_INIT diff --git a/makefiles/tools/openocd-adapters/mulle.inc.mk b/makefiles/tools/openocd-adapters/mulle.inc.mk new file mode 100644 index 0000000000..3004e09b34 --- /dev/null +++ b/makefiles/tools/openocd-adapters/mulle.inc.mk @@ -0,0 +1,33 @@ +# OpenOCD settings for Mulle programmer board. +# Try to determine which OpenOCD config file we should use based on the +# programmer board serial number. + +# Fall back to PROGRAMMER_SERIAL for backwards compatibility +export DEBUG_ADAPTER_ID ?= $(PROGRAMMER_SERIAL) + +ifneq (,$(DEBUG_ADAPTER_ID)) + # Makefile-way of comparing numbers, using lexicographical sorting since we + # don't have any arithmetic comparisons. + # Programmers with serial 100 -- 148 are version 0.60 + # Programmers with serial 301 -- 330 are version 0.70 + ifeq "100" "$(word 1, $(sort 100 $(DEBUG_ADAPTER_ID)))" + # >= 100 + ifneq "149" "$(word 1, $(sort 149 $(DEBUG_ADAPTER_ID)))" + # < 149 + PROGRAMMER_VERSION = 0.60 + else + # >= 149 + PROGRAMMER_VERSION = 0.70 + endif + endif +endif +# Default to version 0.70 programmer +PROGRAMMER_VERSION ?= 0.70 + +OPENOCD_ADAPTER_INIT ?= -f '$(RIOTBASE)/boards/mulle/dist/openocd/mulle-programmer-$(PROGRAMMER_VERSION).cfg' + +# Add serial matching command, only if DEBUG_ADAPTER_ID was specified +ifneq (,$(DEBUG_ADAPTER_ID)) + OPENOCD_ADAPTER_INIT += -c 'ftdi_serial $(DEBUG_ADAPTER_ID)' +endif +export OPENOCD_ADAPTER_INIT diff --git a/makefiles/tools/openocd-adapters/stlink.inc.mk b/makefiles/tools/openocd-adapters/stlink.inc.mk new file mode 100644 index 0000000000..b9ef8d1ee0 --- /dev/null +++ b/makefiles/tools/openocd-adapters/stlink.inc.mk @@ -0,0 +1,10 @@ +# ST-Link debug adapter +# Use STLINK_VERSION to select which stlink version is used +OPENOCD_ADAPTER_INIT ?= \ + -c 'source [find interface/stlink-v$(STLINK_VERSION).cfg]' \ + -c 'transport select hla_swd' +# Add serial matching command, only if DEBUG_ADAPTER_ID was specified +ifneq (,$(DEBUG_ADAPTER_ID)) + OPENOCD_ADAPTER_INIT += -c 'hla_serial $(DEBUG_ADAPTER_ID)' +endif +export OPENOCD_ADAPTER_INIT diff --git a/makefiles/tools/openocd.inc.mk b/makefiles/tools/openocd.inc.mk index f2b694115f..3208716d2b 100644 --- a/makefiles/tools/openocd.inc.mk +++ b/makefiles/tools/openocd.inc.mk @@ -8,3 +8,7 @@ export FFLAGS ?= flash export DEBUGGER_FLAGS ?= debug export DEBUGSERVER_FLAGS ?= debug-server export RESET_FLAGS ?= reset + +ifneq (,$(DEBUG_ADAPTER)) + include $(RIOTMAKE)/tools/openocd-adapters/$(DEBUG_ADAPTER).inc.mk +endif