diff --git a/Makefile b/Makefile
index bc675e4..c74c29e 100644
--- a/Makefile
+++ b/Makefile
@@ -1374,30 +1374,19 @@
 endif
 
 ifneq ($(FLASH_SCRIPT),)
-ifeq ($(USE_ZEPHYR_FLASH_DEBUG_SHELL),)
 flash: zephyr
 	@echo "Flashing $(BOARD_NAME)"
 	$(Q)$(srctree)/scripts/support/zephyr_flash_debug.py flash $(srctree)/scripts/support/$(FLASH_SCRIPT)
 else
-flash: zephyr
-	@echo "Flashing $(BOARD_NAME)"
-	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/support/$(FLASH_SCRIPT) flash
-endif
-else
 flash: FORCE
 	@echo Flashing not supported with this board.
 	@echo Please check the documentation for alternate instructions.
 endif
 
 ifneq ($(DEBUG_SCRIPT),)
-ifeq ($(USE_ZEPHYR_FLASH_DEBUG_SHELL),)
 debug: zephyr
 	$(Q)$(srctree)/scripts/support/zephyr_flash_debug.py debug $(srctree)/scripts/support/$(DEBUG_SCRIPT)
 else
-debug: zephyr
-	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/support/$(DEBUG_SCRIPT) debug
-endif
-else
 debug: FORCE
 	@echo Debugging not supported with this board.
 	@echo Please check the documentation for alternate instructions.
diff --git a/Makefile.inc b/Makefile.inc
index a2895df..0aaa0ba 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -100,15 +100,10 @@
 endif
 
 ifneq ($(DEBUG_SCRIPT),)
-ifeq ($(USE_ZEPHYR_FLASH_DEBUG_SHELL),)
 debugserver: FORCE
 	$(Q)$(ZEPHYR_BASE)/scripts/support/zephyr_flash_debug.py debugserver $(ZEPHYR_BASE)/scripts/support/$(DEBUG_SCRIPT)
 else
 debugserver: FORCE
-	$(Q)$(CONFIG_SHELL) $(ZEPHYR_BASE)/scripts/support/$(DEBUG_SCRIPT) debugserver
-endif
-else
-debugserver: FORCE
 	@echo Debugging not supported with this board.
 	@echo Please check the documentation for alternate instructions.
 endif
diff --git a/scripts/support/arc_debugger.sh b/scripts/support/arc_debugger.sh
deleted file mode 100755
index 02aa926..0000000
--- a/scripts/support/arc_debugger.sh
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/bin/sh
-
-# This script is loosly based on a script with same purpose provided
-# by RIOT-OS (https://github.com/RIOT-OS/RIOT)
-
-OPENOCD=${OPENOCD:-openocd}
-OPENOCD_CMD="${OPENOCD}${OPENOCD_DEFAULT_PATH:+ -s $OPENOCD_DEFAULT_PATH}"
-OPENOCD_CONFIG=${ZEPHYR_BASE}/boards/${ARCH}/${BOARD_NAME}/support/openocd.cfg
-BIN_NAME=${O}/${KERNEL_BIN_NAME}
-ELF_NAME=${O}/${KERNEL_ELF_NAME}
-
-test_config() {
-    if [ ! -f "${OPENOCD_CONFIG}" ]; then
-        echo "Error: Unable to locate OpenOCD configuration file: ${OPENOCD_CONFIG}"
-        exit 1
-    fi
-    if ! which ${OPENOCD} >/dev/null 2>&1; then
-        echo "Error: Unable to locate OpenOCD executable: ${OPENOCD}"
-        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
-    # setsid is needed so that Ctrl+C in GDB doesn't kill OpenOCD
-    [ -z "${SETSID}" ] && SETSID="$(which setsid)"
-    # temporary file that saves OpenOCD pid
-    OCD_PIDFILE=$(mktemp -t "openocd_pid.XXXXXXXXXX")
-    # cleanup after script terminates
-    trap "cleanup ${OCD_PIDFILE}" EXIT
-    # don't trap on Ctrl+C, because GDB keeps running
-    trap '' INT
-    # start OpenOCD as GDB server
-    ${SETSID} sh -c "${OPENOCD_CMD} -f '${OPENOCD_CONFIG}' \
-            ${OPENOCD_EXTRA_INIT} \
-            -c 'tcl_port ${TCL_PORT:-6333}' \
-            -c 'telnet_port ${TELNET_PORT:-4444}' \
-            -c 'gdb_port ${GDB_PORT:-3333}' \
-            -c 'init' \
-            -c 'targets' \
-            -c 'halt' \
-             & \
-            echo \$! > $OCD_PIDFILE" &
-    # connect to the GDB server
-    ${GDB} ${TUI} -ex "target remote :${GDB_PORT:-3333}" \
-            -ex "load" -ex "c" ${ELF_NAME}
-    # will be called by trap
-    cleanup() {
-        OCD_PID="$(cat $OCD_PIDFILE)"
-        kill ${OCD_PID} &>/dev/null
-        rm -f "$OCD_PIDFILE"
-        exit 0
-    }
-}
-
-
-do_debug() {
-    test_config
-    test_bin
-    # setsid is needed so that Ctrl+C in GDB doesn't kill OpenOCD
-    [ -z "${SETSID}" ] && SETSID="$(which setsid)"
-    # temporary file that saves OpenOCD pid
-    OCD_PIDFILE=$(mktemp -t "openocd_pid.XXXXXXXXXX")
-    # cleanup after script terminates
-    trap "cleanup ${OCD_PIDFILE}" EXIT
-    # don't trap on Ctrl+C, because GDB keeps running
-    trap '' INT
-    # start OpenOCD as GDB server
-    ${SETSID} sh -c "${OPENOCD_CMD} -f '${OPENOCD_CONFIG}' \
-            ${OPENOCD_EXTRA_INIT} \
-            -c 'tcl_port ${TCL_PORT:-6333}' \
-            -c 'telnet_port ${TELNET_PORT:-4444}' \
-            -c 'gdb_port ${GDB_PORT:-3333}' \
-            -c 'init' \
-            -c 'targets' \
-            -c 'halt' \
-             & \
-            echo \$! > $OCD_PIDFILE" &
-    # connect to the GDB server
-    ${GDB} ${TUI} -ex "target remote :${GDB_PORT:-3333}" -ex "load" ${ELF_NAME}
-    # will be called by trap
-    cleanup() {
-        OCD_PID="$(cat $OCD_PIDFILE)"
-        kill ${OCD_PID} &>/dev/null
-        rm -f "$OCD_PIDFILE"
-        exit 0
-    }
-}
-
-do_debugserver() {
-    test_config
-    sh -c "${OPENOCD_CMD} -f '${OPENOCD_CONFIG}' \
-            -c 'init' \
-            -c 'targets' \
-            -c 'reset halt'"
-}
-
-CMD="$1"
-shift
-
-if [ "$KBUILD_VERBOSE" -eq 1 ]
-then
-	set -x
-fi
-
-case "${CMD}" in
-  flash)
-    echo "Flashing Target Device"
-    do_flash "$@"
-    ;;
-  debugserver)
-    do_debugserver "$@"
-    ;;
-  debug)
-    do_debug "$@"
-    ;;
-esac
diff --git a/scripts/support/bossa-flash.sh b/scripts/support/bossa-flash.sh
deleted file mode 100755
index 9989aef..0000000
--- a/scripts/support/bossa-flash.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-# This script is loosly based on a script with same purpose provided
-# by RIOT-OS (https://github.com/RIOT-OS/RIOT)
-
-BOSSAC_CMD="${BOSSAC:-bossac}"
-BOSSAC_PORT=${BOSSAC_PORT:-"/dev/ttyACM0"}
-if [ `uname` = "Linux" ]; then
-    stty -F ${BOSSAC_PORT} raw ispeed 1200 ospeed 1200 cs8 \
--cstopb ignpar eol 255 eof 255
-    ${BOSSAC_CMD} -p ${BOSSAC_PORT} -R -e -w -v -b "${O}/${KERNEL_BIN_NAME}"
-else
-    echo "CAUTION: No flash tool for your host system found!"
-fi
-
diff --git a/scripts/support/dfuutil.sh b/scripts/support/dfuutil.sh
deleted file mode 100755
index 526356c..0000000
--- a/scripts/support/dfuutil.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-
-# This script is inspired from ./openocd.sh, and from both flash_dfu.sh and
-# fwversion.sh, included in arduino101-factory_recovery-flashpack.tar.bz2,
-# which is available from https://downloadcenter.intel.com/download/25470
-
-# It requires the following environment variables to be defined, typically
-# exported from Makefile.board:
-# - DFUUTIL_PID: vendor_ID:product_ID of the board in DFU mode
-# - DFUUTIL_ALT: alternate setting name or number of the DFU interface
-# - DFUUTIL_IMG: path to the binary image sent to the board
-# - DFUUTIL_DFUSE_ADDR: target address, for DfuSe devices
-
-DFUUTIL_EXE=${DFUUTIL:-dfu-util}
-DFUUTIL_CMD="$DFUUTIL_EXE -d,$DFUUTIL_PID"
-
-# Is DFUUTIL_ALT a numeric value?
-num=$(printf '%u' "$DFUUTIL_ALT" 2>/dev/null)
-if [ $? -eq 0 -a "$num" = "$DFUUTIL_ALT" ]; then
-    # alternate setting number
-    pattern=", alt=$DFUUTIL_ALT,"
-else
-    # alternate setting name
-    pattern=", name=\"$DFUUTIL_ALT\","
-fi
-
-test_exe() {
-    if ! which $DFUUTIL_EXE >/dev/null 2>&1; then
-        echo "Error: Unable to locate dfu-util executable: $DFUUTIL_EXE"
-        exit 1
-    fi
-}
-
-test_img() {
-    if [ ! -f "$DFUUTIL_IMG" ]; then
-        echo "Error: Unable to locate binary image: $DFUUTIL_IMG"
-        exit 1
-    fi
-}
-
-find_dfu() {
-    $DFUUTIL_CMD -l |grep "$pattern" >/dev/null 2>&1
-}
-
-do_flash() {
-    test_exe
-    test_img
-
-    # Wait until DFU device is ready
-    reset_dfu=0
-    if ! find_dfu; then
-        reset_dfu=1
-        echo "Please reset your board to switch to DFU mode..."
-        until find_dfu; do
-            sleep 0.1
-        done
-    fi
-
-    # Allow DfuSe based devices by checking for DFUUTIL_DFUSE_ADDR
-    if [ -n "${DFUUTIL_DFUSE_ADDR}" ]; then
-        DFUUTIL_CMD="${DFUUTIL_CMD} -s ${DFUUTIL_DFUSE_ADDR}:leave"
-    fi
-
-    # Flash DFU device with specified image
-    # Do NOT reset with -R, to avoid random 'error resetting after download'
-    $DFUUTIL_CMD -a "$DFUUTIL_ALT" -D $DFUUTIL_IMG
-    ok=$?
-    if [ $ok -eq 0 -a $reset_dfu -eq 1 ]; then
-        echo "Now reset your board again to switch back to runtime mode."
-    fi
-    return $ok
-}
-
-if [ "$KBUILD_VERBOSE" -eq 1 ]
-then
-        set -x
-fi
-
-CMD=$1
-shift
-
-case "$CMD" in
-  flash)
-    do_flash "$@"
-    ;;
-  *)
-    echo "Unsupported command '$CMD'"
-    exit 1
-    ;;
-esac
-
diff --git a/scripts/support/esp32.sh b/scripts/support/esp32.sh
deleted file mode 100755
index f6b37e1..0000000
--- a/scripts/support/esp32.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-
-ESP_DEVICE=${ESP_DEVICE:-/dev/ttyUSB0}
-ESP_BAUD_RATE=${ESP_BAUD_RATE:-921600}
-ESP_FLASH_SIZE=${ESP_FLASH_SIZE:-detect}
-ESP_FLASH_FREQ=${ESP_FLASH_FREQ:-40m}
-ESP_FLASH_MODE=${ESP_FLASH_MODE:-dio}
-ESP_TOOL=${ESP_TOOL:-espidf}
-
-cmd_flash() {
-	local esptool
-	local elf_name=${O}/${KERNEL_ELF_NAME}
-
-	if [ "x${ESP_TOOL}" = "xespidf" ]; then
-		esptool=${ESP_IDF_PATH}/components/esptool_py/esptool/esptool.py
-	else
-		esptool=${ESP_TOOL}
-	fi
-	if [ ! -x ${esptool} ]; then
-		echo "esptool could not be found at ${esptool}"
-		exit 1
-	fi
-
-	echo "Converting ELF to BIN"
-	${esptool} --chip esp32 elf2image ${elf_name}
-
-	echo "Flashing ESP32 on ${ESP_DEVICE} (${ESP_BAUD_RATE}bps)"
-	${esptool} --chip esp32 \
-		--port ${ESP_DEVICE} \
-		--baud ${ESP_BAUD_RATE} \
-		--before default_reset \
-		--after hard_reset \
-		write_flash \
-		-u \
-		--flash_mode ${ESP_FLASH_MODE} \
-		--flash_freq ${ESP_FLASH_FREQ} \
-		--flash_size ${ESP_FLASH_SIZE} \
-		0x1000 ${elf_name/.elf/.bin}
-}
-
-CMD="$1"; shift
-case "${CMD}" in
-   flash)
-   	cmd_flash "$@"
-   	;;
-   *)
-   	echo "${CMD} not supported"
-   	exit 1
-   	;;
-esac
diff --git a/scripts/support/jlink.sh b/scripts/support/jlink.sh
deleted file mode 100755
index e301a58..0000000
--- a/scripts/support/jlink.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/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
diff --git a/scripts/support/nios2.sh b/scripts/support/nios2.sh
deleted file mode 100755
index 1c3ff5b..0000000
--- a/scripts/support/nios2.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/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
diff --git a/scripts/support/nrf_flash.sh b/scripts/support/nrf_flash.sh
deleted file mode 100755
index f867a18..0000000
--- a/scripts/support/nrf_flash.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-
-HEX_NAME=${O}/${KERNEL_HEX_NAME}
-
-command -v nrfjprog >/dev/null 2>&1 || { echo >&2 "Can't flash nRF board,"\
-						  "nrfjprog is not installed."\
-						  "Aborting."; exit 1; }
-
-CONNECTED_BOARDS=`nrfjprog --ids`
-read -s -a BOARD_LIST <<< $CONNECTED_BOARDS
-
-BOARDS_NUM=`echo "$CONNECTED_BOARDS" | wc -l`
-if [ $BOARDS_NUM == 1 ]
-then
-	BOARD_SNR=$BOARD_LIST
-else
-	echo "There are multiple boards connected."
-	for i in $(seq 1 1 $BOARDS_NUM)
-	do
-		echo $i. ${BOARD_LIST[$i - 1]}
-	done
-
-	prompt="Please select one with desired serial number (1-$BOARDS_NUM):"
-	while true; do
-		read -p "$prompt" ANS
-		if [ 1 -le $ANS -a $ANS -le $BOARDS_NUM ]
-		then
-			break;
-		else
-			echo -n
-		fi
-	done
-
-	BOARD_SNR=${BOARD_LIST[$ANS - 1]}
-fi
-
-echo "Flashing file: "${HEX_NAME}
-
-nrfjprog --eraseall -f $NRF_FAMILY --snr $BOARD_SNR &&
-nrfjprog --program $HEX_NAME -f $NRF_FAMILY --snr $BOARD_SNR &&
-if [ $NRF_FAMILY == NRF52 ]
-then
-	# Set reset pin
-	nrfjprog --memwr 0x10001200 --val 0x00000015 \
-		 -f $NRF_FAMILY --snr $BOARD_SNR
-	nrfjprog --memwr 0x10001204 --val 0x00000015 \
-		 -f $NRF_FAMILY --snr $BOARD_SNR
-	nrfjprog --reset -f $NRF_FAMILY --snr $BOARD_SNR
-fi
-nrfjprog --pinreset -f $NRF_FAMILY --snr $BOARD_SNR
-
-if [ $? -eq 0 ]; then
-    echo "${BOARD} Serial Number $BOARD_SNR flashed with success."
-else
-    echo "Flashing ${BOARD} failed."
-    exit 2;
-fi
diff --git a/scripts/support/openocd.sh b/scripts/support/openocd.sh
deleted file mode 100755
index d2824fc..0000000
--- a/scripts/support/openocd.sh
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-
-# This script is loosly based on a script with same purpose provided
-# by RIOT-OS (https://github.com/RIOT-OS/RIOT)
-
-OPENOCD=${OPENOCD:-openocd}
-OPENOCD_CMD="${OPENOCD}${OPENOCD_DEFAULT_PATH:+ -s $OPENOCD_DEFAULT_PATH}"
-OPENOCD_CONFIG=${ZEPHYR_BASE}/boards/${ARCH}/${BOARD_NAME}/support/openocd.cfg
-BIN_NAME=${O}/${KERNEL_BIN_NAME}
-ELF_NAME=${O}/${KERNEL_ELF_NAME}
-
-test_config() {
-    if [ ! -f "${OPENOCD_CONFIG}" ]; then
-        echo "Error: Unable to locate OpenOCD configuration file: ${OPENOCD_CONFIG}"
-        exit 1
-    fi
-    if ! which ${OPENOCD} >/dev/null 2>&1; then
-        echo "Error: Unable to locate OpenOCD executable: ${OPENOCD}"
-        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
-    sh -c  "${OPENOCD_CMD} -f '${OPENOCD_CONFIG}' \
-            -c 'init' \
-            -c 'targets' \
-            ${OPENOCD_PRE_CMD:+-c $OPENOCD_PRE_CMD} \
-            -c 'reset halt' \
-            -c ${OPENOCD_LOAD_CMD} \
-            -c 'reset halt' \
-            -c ${OPENOCD_VERIFY_CMD} \
-            ${OPENOCD_POST_CMD:+-c $OPENOCD_POST_CMD} \
-            -c 'reset run' \
-            -c 'shutdown'"
-}
-
-
-do_debug() {
-    test_config
-    test_bin
-    # setsid is needed so that Ctrl+C in GDB doesn't kill OpenOCD
-    [ -z "${SETSID}" ] && SETSID="$(which setsid)"
-    # temporary file that saves OpenOCD pid
-    OCD_PIDFILE=$(mktemp -t "openocd_pid.XXXXXXXXXX")
-    # cleanup after script terminates
-    trap "cleanup ${OCD_PIDFILE}" EXIT
-    # don't trap on Ctrl+C, because GDB keeps running
-    trap '' INT
-    # start OpenOCD as GDB server
-    ${SETSID} sh -c "${OPENOCD_CMD} -f '${OPENOCD_CONFIG}' \
-            ${OPENOCD_EXTRA_INIT} \
-            -c 'tcl_port ${TCL_PORT:-6333}' \
-            -c 'telnet_port ${TELNET_PORT:-4444}' \
-            -c 'gdb_port ${GDB_PORT:-3333}' \
-            -c 'init' \
-            -c 'targets' \
-            -c 'halt' \
-             & \
-            echo \$! > $OCD_PIDFILE" &
-    # connect to the GDB server
-    ${GDB} ${TUI} -ex "target remote :${GDB_PORT:-3333}" ${ELF_NAME}
-    # will be called by trap
-    cleanup() {
-        OCD_PID="$(cat $OCD_PIDFILE)"
-        kill ${OCD_PID} &>/dev/null
-        rm -f "$OCD_PIDFILE"
-        exit 0
-    }
-}
-
-do_debugserver() {
-    test_config
-    sh -c "${OPENOCD_CMD} -f '${OPENOCD_CONFIG}' \
-            -c 'init' \
-            -c 'targets' \
-            -c 'reset halt'"
-}
-
-CMD="$1"
-shift
-
-if [ "$KBUILD_VERBOSE" -eq 1 ]
-then
-	set -x
-fi
-
-case "${CMD}" in
-  flash)
-    echo "Flashing Target Device"
-    do_flash "$@"
-    ;;
-  debugserver)
-    do_debugserver "$@"
-    ;;
-  debug)
-    do_debug "$@"
-    ;;
-esac
diff --git a/scripts/support/pyocd.sh b/scripts/support/pyocd.sh
deleted file mode 100755
index 57b11f2..0000000
--- a/scripts/support/pyocd.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/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
diff --git a/scripts/support/qemu.sh b/scripts/support/qemu.sh
deleted file mode 100755
index 3a0e2fd..0000000
--- a/scripts/support/qemu.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-# Just a place holder for any custimizations.
-
-do_debugserver() {
-	echo "Detached GDB server"
-}
-
-CMD="$1"
-shift
-
-case "${CMD}" in
-  debugserver)
-    do_debugserver "$@"
-    ;;
-esac
diff --git a/scripts/support/xt-gdb.sh b/scripts/support/xt-gdb.sh
deleted file mode 100755
index edd8f0f..0000000
--- a/scripts/support/xt-gdb.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-XT_GDB=$XCC_TOOLS/bin/xt-gdb
-ELF_NAME=${O}/${KERNEL_ELF_NAME}
-
-set -e
-
-do_debug() {
-    ${XT_GDB} ${ELF_NAME}
-}
-
-CMD="$1"
-shift
-
-case "${CMD}" in
-  debug)
-    do_debug "$@"
-    ;;
-  *)
-    echo "${CMD} not supported"
-    exit 1
-    ;;
-esac
diff --git a/scripts/support/zephyr_flash_debug.py b/scripts/support/zephyr_flash_debug.py
index ee8bf3f..a82317e 100755
--- a/scripts/support/zephyr_flash_debug.py
+++ b/scripts/support/zephyr_flash_debug.py
@@ -6,13 +6,12 @@
 
 """Zephyr flash/debug script
 
-This script is a transparent replacement for existing Zephyr flash and debug
-scripts, i.e. scripts to flash binaries, run them, and debug them on real or
-emulated hardware. If it can invoke the relevant tools natively, it will do so;
-otherwise, it delegates to the shell script."""
+This script is a transparent replacement for legacy Zephyr flash and
+debug scripts which have now been removed. It will be refactored over
+time as the rest of the build system is taught to use it.
+"""
 
 from os import path
-import subprocess
 import sys
 
 from runner.core import ZephyrBinaryRunner, get_env_bool_or
@@ -33,11 +32,9 @@
                                                             command,
                                                             debug)
     except ValueError:
-        # Unsupported; fall back on shell script.
-        print('Unsupported, falling back on shell script',
+        print('Unrecognized shell script {}'.format(shell_script_full),
               file=sys.stderr)
-        subprocess.check_call([shell_script_full, command])
-        return
+        raise
 
     runner.run(command)
 
