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>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
#!/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, раздел «Что воспроизводится побайтово»"
|
||||
Reference in New Issue
Block a user