Files
radar_system/device_firmware/multi_libreVNA_firmware/reproduce/build.sh
T
AyzenandClaude Opus 5 d2338ff10c added librevna firmware reproduce kit
Полное дерево LibreVNA v1.6.5 с доработками master/slave, эталонные битстримы
и прошивки STM32, упаковщик .vnafw. Проверено: build.sh пересобирает обе
прошивки побайтово идентично лежащим рядом .vnafw.

Мастер-битстрим (top_master.bin / extracted/master_fpga.bin) больше нигде не
существует — place&route в ISE недетерминирован, из исходников он не
восстанавливается.

Положено в multi_libreVNA_firmware/reproduce, а не в device_firmware/reproduce
как сказано в README комплекта: SHA256SUMS и build.sh ссылаются на
../combined.vnafw, а .vnafw лежат здесь.

Корневые правила .gitignore build*/build/ выбрасывали 482 файла, включая сам
build.sh и эталонные прошивки STM32 из SHA256SUMS — дописано разыгноривание.
Оставшиеся 7 файлов перебивал вложенный апстримный .gitignore (более глубокий
имеет приоритет), они добавлены force-add'ом. Промежуточные .o/.d/.su из
build-каталогов убраны, .bin/.elf/.hex/.map оставлены.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 21:08:02 +03:00

85 lines
4.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Пересборка прошивок LibreVNA для radar_system.
#
# Дерево проекта лежит рядом: ./LibreVNA (апстрим v1.6.5 + доработки под master/slave).
#
# ./build.sh упаковать .vnafw из уже собранных .bin
# -> результат побайтово совпадает с device_firmware/*.vnafw
# ./build.sh --stm32 сначала пересобрать STM32 из исходников, потом упаковать
#
# FPGA-битстримы здесь НЕ собираются: нужна Xilinx ISE 14.7 в виртуалке (см. README.md).
set -euo pipefail
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SRC="$HERE/LibreVNA"
OUT="$HERE/out"
REBUILD_STM32=0
[ "${1:-}" = "--stm32" ] && REBUILD_STM32=1
# Ищем рабочий Python 3. В PATH под Windows часто висит заглушка из Microsoft Store,
# которая только печатает рекламу — поэтому каждого кандидата реально проверяем.
find_python() {
local c
for c in "${PYTHON:-}" python3 python py \
"$HOME/AppData/Local/Programs/Python/Python312/python.exe" \
/c/Users/*/AppData/Local/Programs/Python/Python3*/python.exe \
/c/Python3*/python.exe; do
[ -n "$c" ] || continue
command -v "$c" >/dev/null 2>&1 || [ -x "$c" ] || continue
if "$c" -c "import sys; sys.exit(0 if sys.version_info[0]==3 else 1)" >/dev/null 2>&1; then
echo "$c"; return 0
fi
done
return 1
}
PY="$(find_python)" || { echo "не найден рабочий Python 3 (задайте: PYTHON=/путь/python $0)"; exit 1; }
mkdir -p "$OUT"
cd "$SRC"
if [ "$REBUILD_STM32" = "1" ]; then
# Тулчейн из STM32CubeIDE 1.17.0 — именно им собраны эталонные .bin (gcc 12.3.1).
# BINPATH обязателен: в Makefile по умолчанию стоит /usr/bin (Linux).
CUBE="C:/ST/STM32CubeIDE_1.17.0/STM32CubeIDE/plugins"
BINPATH="${BINPATH:-$CUBE/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.1.0.202410251130/tools/bin}"
MK="/c/ST/STM32CubeIDE_1.17.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.make.win32_2.2.0.202409170845/tools/bin"
[ -d "$MK" ] && export PATH="$MK:$PATH"
[ -e "$BINPATH/arm-none-eabi-gcc.exe" ] || [ -e "$BINPATH/arm-none-eabi-gcc" ] || {
echo "не найден тулчейн: $BINPATH"
echo "укажите свой: BINPATH=/путь/к/tools/bin $0 --stm32"; exit 1; }
echo "==> STM32: мастер"
make -C Software/VNA_embedded BINPATH="$BINPATH" -j4 >/dev/null
echo "==> STM32: external LO slave"
make -C Software/VNA_embedded BINPATH="$BINPATH" -j4 \
EXTERNAL_MASTER_LO_SLAVE=1 BUILD_DIR=build_external_lo_slave >/dev/null
fi
echo "==> упаковка combined.vnafw (мастер)"
"$PY" AssembleFirmware.py \
--bitstream FPGA/VNA/top_master.bin \
--mcu Software/VNA_embedded/build/VNA_embedded.bin \
--output "$OUT/combined.vnafw"
echo "==> упаковка combined_external_lo_slave.vnafw"
"$PY" AssembleFirmware.py \
--bitstream FPGA/VNA/top_external_lo_slave.bin \
--mcu Software/VNA_embedded/build_external_lo_slave/VNA_embedded.bin \
--output "$OUT/combined_external_lo_slave.vnafw"
echo
echo "==> сверка с эталонами device_firmware/"
ok=1
for f in combined.vnafw combined_external_lo_slave.vnafw; do
a=$(sha256sum < "$OUT/$f" | cut -d' ' -f1)
b=$(sha256sum < "$HERE/../$f" | cut -d' ' -f1)
if [ "$a" = "$b" ]; then
echo " $f: совпадает побайтово"
else
echo " $f: ОТЛИЧАЕТСЯ"; ok=0
fi
done
echo
ls -l "$OUT"
[ "$ok" = "1" ] || echo "ВНИМАНИЕ: расхождение — см. README.md, раздел «Что воспроизводится побайтово»"