Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

#!/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} \
	-silent \
	-singlerun
}

CMD="$1"
shift

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