Полное дерево 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>
85 lines
4.0 KiB
Bash
Executable File
85 lines
4.0 KiB
Bash
Executable File
#!/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, раздел «Что воспроизводится побайтово»"
|