scripts: improve create-dfu-image.sh
Signed-off-by: Onur Özkan <work@onurozkan.dev>
This commit is contained in:
1 parent
a7f20eabbe
commit
482f4c0283
3 files changed
+22
-8
No files matched your search
@@ -15,12 +15,10 @@ cargo build --release -p kaptan-kakute-f7-mini-v3 --features firmware --target t
|
|||||||
Create its DFU (device firmware update) image:
|
Create its DFU (device firmware update) image:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./scripts/create-dfu-image.sh \
|
./scripts/create-dfu-image.sh target/thumbv7em-none-eabihf/release/kaptan-kakute-f7-mini-v3
|
||||||
target/thumbv7em-none-eabihf/release/kaptan-kakute-f7-mini-v3 \
|
|
||||||
target/thumbv7em-none-eabihf/release/kaptan-kakute-f7-mini-v3.bin
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The converter works with any firmware ELF. It uses rustup's `llvm-tools-preview` component which the workspace toolchain installs automatically.
|
The converter derives the `.bin` path and matching board `memory.x`, then prints the firmware size report. It uses rustup's `llvm-tools-preview` component which the workspace toolchain installs automatically.
|
||||||
|
|
||||||
## Flash over USB DFU
|
## Flash over USB DFU
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"""Show flash, static RAM and ELF-section use for embedded firmware.
|
"""Show flash, static RAM and ELF-section use for embedded firmware.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
python3 scripts/analyze_kaptan_firmware.py <firmware.elf> <memory.x>
|
scripts/analyze-fw.py <firmware.elf> <memory.x>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|||||||
@@ -1,16 +1,31 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
if [[ $# -ne 2 ]]; then
|
if [[ $# -ne 1 ]]; then
|
||||||
printf 'Usage: %s <input.elf> <output.bin>\n' "$0" >&2
|
printf 'Usage: %s <firmware.elf>\n' "$0" >&2
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
readonly input_elf="$1"
|
readonly input_elf="$1"
|
||||||
readonly output_image="$2"
|
readonly firmware_name="$(basename "${input_elf%.elf}")"
|
||||||
|
readonly board_name="${firmware_name#kaptan-}"
|
||||||
|
readonly output_image="${input_elf%.elf}.bin"
|
||||||
|
readonly script_directory="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
readonly workspace_root="$(cd -- "$script_directory/.." && pwd)"
|
||||||
|
readonly memory_x="$workspace_root/boards/$board_name/memory.x"
|
||||||
readonly host="$(rustc -vV | sed -n 's/^host: //p')"
|
readonly host="$(rustc -vV | sed -n 's/^host: //p')"
|
||||||
readonly llvm_objcopy="$(rustc --print sysroot)/lib/rustlib/$host/bin/llvm-objcopy"
|
readonly llvm_objcopy="$(rustc --print sysroot)/lib/rustlib/$host/bin/llvm-objcopy"
|
||||||
|
|
||||||
|
if [[ ! -f "$input_elf" ]]; then
|
||||||
|
printf 'firmware ELF does not exist: %s\n' "$input_elf" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$memory_x" ]]; then
|
||||||
|
printf 'cannot find the linker layout for board %q: %s\n' "$board_name" "$memory_x" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ! -x "$llvm_objcopy" ]]; then
|
if [[ ! -x "$llvm_objcopy" ]]; then
|
||||||
printf 'llvm-objcopy is unavailable; install it with: rustup component add llvm-tools-preview\n' >&2
|
printf 'llvm-objcopy is unavailable; install it with: rustup component add llvm-tools-preview\n' >&2
|
||||||
exit 1
|
exit 1
|
||||||
@@ -18,3 +33,4 @@ fi
|
|||||||
|
|
||||||
"$llvm_objcopy" -O binary "$input_elf" "$output_image"
|
"$llvm_objcopy" -O binary "$input_elf" "$output_image"
|
||||||
printf 'DFU image: %s\n' "$output_image"
|
printf 'DFU image: %s\n' "$output_image"
|
||||||
|
"$script_directory/analyze-fw.py" "$input_elf" "$memory_x"
|
||||||
Reference in new issue
Block a user