1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #9787 from cladmi/pr/openocd/flashbin

openocd.sh: allow flashing binary files without configuration
This commit is contained in:
Francisco Acosta 2018-09-04 19:31:49 +02:00 committed by GitHub
commit 7a40aaed5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# Unified OpenOCD script for RIOT
#
@ -145,6 +145,43 @@ test_imagefile() {
fi
}
_has_bin_extension() {
# The regex need to be without quotes
local firmware=$1
[[ "${firmware}" =~ ^.*\.bin$ ]]
}
# Return 0 if given file should be considered a binary
_is_binfile() {
local firmware="$1"
local firmware_type="$2"
[[ "${firmware_type}" = "bin" ]] || { \
[[ -z "${firmware_type}" ]] && _has_bin_extension "${firmware}"; }
}
# Outputs bank info on different lines without the '{}'
_flash_list() {
# Openocd output for 'flash list' is
# ....
# {name nrf51 base 0 size 0 bus_width 1 chip_width 1} {name nrf51 base 268439552 size 0 bus_width 1 chip_width 1}
# ....
sh -c "${OPENOCD} \
${OPENOCD_ADAPTER_INIT} \
-f '${OPENOCD_CONFIG}' \
-c 'flash list' \
-c 'shutdown'" 2>&1 | sed -n '/^{.*}$/ {s/\} /\}\n/g;s/[{}]//g;p}'
}
# Print flash address for 'bank_num' num defaults to 1
# _flash_address [bank_num:1]
_flash_address() {
bank_num=${1:-1}
# extract 'base' value and print as hexadecimal
# name nrf51 base 268439552 size 0 bus_width 1 chip_width 1
_flash_list | awk "NR==${bank_num}"'{printf "0x%08x\n", $4}'
}
#
# now comes the actual actions
#
@ -159,6 +196,21 @@ do_flash() {
exit $RETVAL
fi
fi
# In case of binary file, IMAGE_OFFSET should include the flash base address
# This allows flashing normal binary files without env configuration
if _is_binfile "${IMAGE_FILE}" "${IMAGE_TYPE}"; then
# hardwritten to use the first bank
FLASH_ADDR=$(_flash_address 1)
echo "Binfile detected, adding ROM base address: ${FLASH_ADDR}"
IMAGE_TYPE=bin
IMAGE_OFFSET=$(printf "0x%08x\n" "$((${IMAGE_OFFSET} + ${FLASH_ADDR}))")
fi
if [ "${IMAGE_OFFSET}" != "0" ]; then
echo "Flashing with IMAGE_OFFSET: ${IMAGE_OFFSET}"
fi
# flash device
sh -c "${OPENOCD} \
${OPENOCD_ADAPTER_INIT} \
@ -173,7 +225,7 @@ do_flash() {
${OPENOCD_PRE_FLASH_CMDS} \
-c 'flash write_image erase \"${IMAGE_FILE}\" ${IMAGE_OFFSET} ${IMAGE_TYPE}' \
${OPENOCD_PRE_VERIFY_CMDS} \
-c 'verify_image \"${IMAGE_FILE}\"' \
-c 'verify_image \"${IMAGE_FILE}\" ${IMAGE_OFFSET}' \
-c 'reset run' \
-c 'shutdown'" &&
echo 'Done flashing'