| #!/bin/sh |
| |
| # This script is loosly based on a script with same purpose provided |
| # by RIOT-OS (https://github.com/RIOT-OS/RIOT) |
| |
| PYOCD_FLASHTOOL=${PYOCD_FLASHTOOL:-pyocd-flashtool} |
| PYOCD_GDBSERVER=${PYOCD_GDBSERVER:-pyocd-gdbserver} |
| BIN_NAME=${O}/${KERNEL_BIN_NAME} |
| ELF_NAME=${O}/${KERNEL_ELF_NAME} |
| GDB_PORT=${GDB_PORT:-3333} |
| |
| PYOCD_BOARD_ID_ARG="" |
| if [ -n "${PYOCD_BOARD_ID}" ]; then |
| PYOCD_BOARD_ID_ARG="-b ${PYOCD_BOARD_ID}" |
| fi |
| |
| PYOCD_DAPARG_ARG="" |
| if [ -n "${PYOCD_DAPARG}" ]; then |
| PYOCD_DAPARG_ARG="-da ${PYOCD_DAPARG}" |
| fi |
| |
| test_config() { |
| if ! which ${PYOCD_FLASHTOOL} >/dev/null 2>&1; then |
| echo "Error: Unable to locate pyOCD flash tool: ${PYOCD_FLASHTOOL}" |
| exit 1 |
| fi |
| if ! which ${PYOCD_GDBSERVER} >/dev/null 2>&1; then |
| echo "Error: Unable to locate pyOCD GDB server: ${PYOCD_GDBSERVER}" |
| exit 1 |
| fi |
| } |
| |
| test_bin() { |
| if [ ! -f "${BIN_NAME}" ]; then |
| echo "Error: Unable to locate image binary: ${BIN_NAME}" |
| exit 1 |
| fi |
| } |
| |
| do_flash() { |
| test_config |
| test_bin |
| |
| # flash device with specified image |
| echo "Flashing Target Device" |
| ${PYOCD_FLASHTOOL} ${PYOCD_DAPARG_ARG} -t ${PYOCD_TARGET} \ |
| ${PYOCD_BOARD_ID_ARG} ${BIN_NAME} |
| } |
| |
| |
| do_debug() { |
| do_debugserver 1 & |
| |
| # connect to the GDB server |
| ${GDB} ${TUI} ${ELF_NAME} \ |
| -ex "target remote :${GDB_PORT}" \ |
| -ex 'load' \ |
| -ex 'monitor reset halt' |
| } |
| |
| 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 "pyOCD GDB server running on port ${GDB_PORT}" |
| ${SETSID} ${PYOCD_GDBSERVER} ${PYOCD_DAPARG_ARG} -p ${GDB_PORT} \ |
| -t ${PYOCD_TARGET} ${PYOCD_BOARD_ID_ARG} |
| } |
| |
| CMD="$1" |
| shift |
| |
| case "${CMD}" in |
| flash) |
| do_flash "$@" |
| ;; |
| debugserver) |
| do_debugserver "$@" |
| ;; |
| debug) |
| do_debug "$@" |
| ;; |
| esac |