#!/bin/sh set -e while [ $# -gt 0 ]; do case $1 in --axf) AXF_FILE="$2" shift shift ;; --bin-dir) BIN_DIR="$2" shift shift ;; --objcopy) OBJCOPY="$2" shift shift ;; --ota-idx) OTA_IDX="$2" shift shift ;; --tools-dir) TOOLS_DIR="$2" shift shift ;; *) echo "Unknown parameter: $1" >&2 exit 1 ;; esac done if [ -z "$AXF_FILE" ] || [ -z "$BIN_DIR" ] || [ -z "$OBJCOPY" ] || [ -z "$OTA_IDX" ] || [ -z "$TOOLS_DIR" ]; then echo "Missing required parameters" >&2 exit 1 fi # TODO: don't use the blobs PICK="$TOOLS_DIR/pick" CHKSUM="$TOOLS_DIR/checksum" OTA="$TOOLS_DIR/ota" # out files IMAGE2_OTA="image2_all_ota${OTA_IDX}.bin" extract_symbol() { grep "$1" "$BIN_DIR/$(basename "$AXF_FILE" .axf).nmap" | cut -d' ' -f1 } echo "Extracting sections..." $OBJCOPY -j .ram_image2.entry -j .ram_image2.data -j .ram_image2.text \ -j .ram_image2.bss -j .ram_image2.skb.bss -j .ram_heap.data \ -Obinary "$AXF_FILE" "$BIN_DIR/ram_2.r.bin" $OBJCOPY -j .xip_image2.text -Obinary "$AXF_FILE" "$BIN_DIR/xip_image2.bin" echo "Processing memory images..." RAM_START=$(extract_symbol __ram_image2_text_start__) RAM_END=$(extract_symbol __ram_image2_text_end__) XIP_START=$(extract_symbol __xip_image2_start__) $PICK "0x$RAM_START" "0x$RAM_END" \ "$BIN_DIR/ram_2.r.bin" "$BIN_DIR/ram_2.p.bin" $PICK "0x$XIP_START" "0x$XIP_START" \ "$BIN_DIR/xip_image2.bin" "$BIN_DIR/xip_image2.p.bin" echo "Generating OTA image..." cat "$BIN_DIR/xip_image2.p.bin" >"$BIN_DIR/$IMAGE2_OTA" cat "$BIN_DIR/ram_2.p.bin" >>"$BIN_DIR/$IMAGE2_OTA" $CHKSUM "$BIN_DIR/$IMAGE2_OTA" # gen for 2nd ota image if needed if [ "$OTA_IDX" = "2" ]; then echo "Generating OTA package..." $OTA "$BIN_DIR/image2_all_ota1.bin" 0x800B000 \ "$BIN_DIR/$IMAGE2_OTA" 0x08080000 0x20170111 \ "$BIN_DIR/ota_all.bin" fi echo "OTA image processing complete!"