Initial commit: OFDM-радиолиния на двух Pluto+ (PHY/link, код на ARM)

- src: transmitter, receiver, ofdm_bench, common (libiio local: + liquid-dsp)
- scripts: кросс-сборка зависимостей, деплой scp -O, e2e-тест с md5
- docs: бенчмарк CPU (выбор rate 1.92 MSPS), грабли FDD/регуляторика
- все текстовые файлы нормализованы в LF (.gitattributes принудительно):
  CRLF в toolchain.env/makefile ломал source и make на Linux
- .vscode: IntelliSense в режиме linux-gcc-arm, заголовки из .xarm/include

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Maxim
2026-07-10 11:00:38 +03:00
commit 0f207b146d
18 changed files with 1579 additions and 0 deletions

42
scripts/deploy.sh Normal file
View File

@@ -0,0 +1,42 @@
#!/usr/bin/env bash
# deploy.sh — заливка бинарей на Pluto (обе или одна плата)
# Использование:
# scripts/deploy.sh # обе платы из toolchain.env
# scripts/deploy.sh 192.168.2.1 # только одна плата
# scripts/deploy.sh <ipA> <ipB> # явные адреса
# scripts/deploy.sh bench <ip> # только бенчмарк
# Прошивка v0.38: sftp-server отсутствует → обязателен scp -O (legacy).
set -euo pipefail
source "$(dirname "$0")/../toolchain.env"
cd "$(dirname "$0")/.."
# sshpass, если установлен, избавляет от ввода пароля (пароль: analog)
if command -v sshpass >/dev/null; then
SCP=(sshpass -p "$PLUTO_PASS" scp -O -o StrictHostKeyChecking=no)
else
SCP=(scp -O)
fi
FILES=(build/transmitter build/receiver build/ofdm_bench)
TARGETS=()
case "${1:-}" in
bench) FILES=(build/ofdm_bench); TARGETS=("${2:-$PLUTO_A}") ;;
"") TARGETS=("$PLUTO_A" "$PLUTO_B") ;;
*) TARGETS=("$@") ;;
esac
for f in "${FILES[@]}"; do
[ -f "$f" ] || { echo "нет $f — сначала make"; exit 1; }
done
for ip in "${TARGETS[@]}"; do
echo "=== деплой на root@$ip:/tmp/ ==="
if ! ping -c1 -W2 "$ip" >/dev/null 2>&1; then
echo " ! $ip не пингуется, пропускаю"; continue
fi
"${SCP[@]}" "${FILES[@]}" "root@$ip:/tmp/"
echo " ok: ${FILES[*]}"
done
echo "Напоминание: rootfs платы в RAM — после перезагрузки залить заново."