|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +# Check arguments |
| 5 | +if [ $# -lt 1 ]; then |
| 6 | + echo "Usage: $0 <clean|update> [version_number]" |
| 7 | + echo " clean: Build and flash a clean factory image (version defaults to 1)" |
| 8 | + echo " update: Build and flash an update image (version defaults to 2)" |
| 9 | + echo " version_number: Version number for the signed image (optional, defaults to 1 for clean, 2 for update)" |
| 10 | + exit 1 |
| 11 | +fi |
| 12 | + |
| 13 | +MODE=$1 |
| 14 | +[ "$MODE" != "clean" ] && [ "$MODE" != "update" ] && { echo "Error: Mode must be 'clean' or 'update'"; exit 1; } |
| 15 | + |
| 16 | +# Set version: default to 1 for clean, default to 2 for update |
| 17 | +VERSION=$([ "$MODE" = "clean" ] && echo "${2:-1}" || echo "${2:-2}") |
| 18 | + |
| 19 | +# Function to get value from .config file |
| 20 | +get_config_value() { |
| 21 | + grep "^${1}" .config | sed -E "s/^${1}[?]?=//" | head -n1 |
| 22 | +} |
| 23 | + |
| 24 | +# Extract values from .config |
| 25 | +BOOT_ADDRESS=$(get_config_value "WOLFBOOT_PARTITION_BOOT_ADDRESS") |
| 26 | +UPDATE_ADDRESS=$(get_config_value "WOLFBOOT_PARTITION_UPDATE_ADDRESS") |
| 27 | +IMAGE_HEADER_SIZE=$(get_config_value "IMAGE_HEADER_SIZE") |
| 28 | +SIGN=$(get_config_value "SIGN") |
| 29 | +HASH=$(get_config_value "HASH") |
| 30 | +SIGN_ARG="--${SIGN,,}" |
| 31 | +HASH_ARG="--${HASH,,}" |
| 32 | + |
| 33 | +# Common build steps |
| 34 | +make clean && make wolfboot.bin && make test-app/image.bin |
| 35 | + |
| 36 | +# Function to sign image |
| 37 | +sign_image() { |
| 38 | + IMAGE_HEADER_SIZE=${IMAGE_HEADER_SIZE} ./tools/keytools/sign ${SIGN_ARG} ${HASH_ARG} test-app/image.bin wolfboot_signing_private_key.der "$1" |
| 39 | +} |
| 40 | + |
| 41 | +# Function to print summary |
| 42 | +print_summary() { |
| 43 | + echo "Computed addresses:" |
| 44 | + echo " BOOT_ADDRESS: ${BOOT_ADDRESS}" |
| 45 | + echo " UPDATE_ADDRESS: ${UPDATE_ADDRESS}" |
| 46 | + [ -n "$1" ] && echo " TRIGGER_ADDRESS: $1" |
| 47 | + echo "Sign/Hash configuration:" |
| 48 | + echo " SIGN: ${SIGN} (${SIGN_ARG})" |
| 49 | + echo " HASH: ${HASH} (${HASH_ARG})" |
| 50 | + [ -n "$2" ] && echo " PREV_VERSION: $2" |
| 51 | + echo " $([ -n "$2" ] && echo "NEW_VERSION" || echo "VERSION"): ${VERSION}" |
| 52 | +} |
| 53 | + |
| 54 | +if [ "$MODE" = "clean" ]; then |
| 55 | + sign_image ${VERSION} |
| 56 | + dd if=/dev/zero of=blank_update.bin bs=1K count=108 |
| 57 | + ./tools/bin-assemble/bin-assemble factory.bin 0x0 wolfboot.bin \ |
| 58 | + ${BOOT_ADDRESS} test-app/image_v${VERSION}_signed.bin \ |
| 59 | + ${UPDATE_ADDRESS} blank_update.bin |
| 60 | + JLinkExe -CommanderScript tools/scripts/va416x0/flash_va416xx.jlink |
| 61 | + print_summary |
| 62 | +else |
| 63 | + PARTITION_SIZE=$(get_config_value "WOLFBOOT_PARTITION_SIZE") |
| 64 | + TRIGGER_ADDRESS=$(printf "0x%X" $((${UPDATE_ADDRESS} + ${PARTITION_SIZE} - 5))) |
| 65 | + PREV_VERSION=$((${VERSION} - 1)) |
| 66 | + sign_image ${PREV_VERSION} && sign_image ${VERSION} |
| 67 | + echo -n "pBOOT" > trigger_magic.bin |
| 68 | + ./tools/bin-assemble/bin-assemble update.bin 0x0 wolfboot.bin \ |
| 69 | + ${BOOT_ADDRESS} test-app/image_v${PREV_VERSION}_signed.bin \ |
| 70 | + ${UPDATE_ADDRESS} test-app/image_v${VERSION}_signed.bin \ |
| 71 | + ${TRIGGER_ADDRESS} trigger_magic.bin |
| 72 | + JLinkExe -CommanderScript tools/scripts/va416x0/flash_va416xx_update.jlink |
| 73 | + print_summary "${TRIGGER_ADDRESS}" "${PREV_VERSION}" |
| 74 | +fi |
0 commit comments