From 005c59fc3aedbb7fddb6d50c266975b8a2a73386 Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 10 Jul 2026 16:39:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7c8beb5..b566455 100644 --- a/README.md +++ b/README.md @@ -82,18 +82,31 @@ sudo apt install -y build-essential autoconf automake libtool git wget \ gcc-arm-linux-gnueabihf ``` -### 4.2 Зависимости (один раз, ~15 мин) +### 4.2 Зависимости (один раз, ~20 мин) -`scripts/build_deps.sh` собирает в `$HOME/xarm` статические armhf-библиотеки: +`scripts/build_deps.sh` собирает в `$HOME/xarm` статические armhf-библиотеки. +**Порядок важен**: liquid зависит от FFTW и libfec, поэтому они собираются до него. 1. **FFTW 3.3.10**: `--enable-single --enable-neon --enable-static` -2. **liquid-dsp 1.8.0**: с `CPPFLAGS=-I$HOME/xarm/include +2. **libfec** (jgaeddert): Reed-Solomon для liquid. liquid **не реализует RS + сам** — оборачивает libfec. Без неё `fec_create(LIQUID_FEC_RS_M8)` вернёт + NULL и `-c rs8` молча пойдёт БЕЗ FEC. Собирать строго ДО liquid. +3. **liquid-dsp 1.8.0**: с `CPPFLAGS=-I$HOME/xarm/include LDFLAGS=-L$HOME/xarm/lib` и обходом autoconf-кросс-проблемы: `ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes` +4. **libiio v0.25**: только local backend (network/usb/xml/iiod отключены). +5. **libad9361-iio**: FIR-фильтр для sample rate < 2.083 MSPS + (`ad9361_set_bb_rate`). Без него AD9361 отвергает 1.92 MSPS (EINVAL). -После сборки liquid **обязательно** проверить, что FFTW подхвачен: -`grep HAVE_LIBFFTW3F config.log` → должно быть `1`. Без FFTW liquid молча -падает на встроенный FFT и цифры бюджета CPU невалидны. +После сборки liquid **обязательно** проверить, что подхвачены и FFTW, и libfec: +`grep -E "HAVE_LIBFFTW3F 1|HAVE_LIBFEC 1" config.log` → обе строки. Без FFTW +liquid молча падает на встроенный FFT (бюджет CPU невалиден); без libfec нет RS. + +⚠️ При обновлении зависимостей liquid надо пересобирать через `make clean`: +его makefile не отслеживает зависимость от `config.h`, и `configure`+`make` +без очистки лишь переустановят старую `libliquid.a` (без FEC). Проверка перед +деплоем: `arm-linux-gnueabihf-nm $XARM/lib/libliquid.a | grep -c init_rs_char` +→ ненулевое = RS-символы libfec действительно связаны. ### 4.3 Ключевые решения по сборке @@ -107,9 +120,13 @@ sudo apt install -y build-essential autoconf automake libtool git wget \ ```bash arm-linux-gnueabihf-gcc -O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard \ -ffast-math -static src/receiver.c src/common.c -o receiver \ - -I$HOME/xarm/include -L$HOME/xarm/lib -lliquid -lfftw3f -lm + -I$HOME/xarm/include -L$HOME/xarm/lib \ + -lad9361 -liio -lliquid -lfec -lfftw3f -lm ``` +Порядок библиотек критичен при статической линковке: зависимый идёт раньше +(`-lad9361` перед `-liio`, `-lliquid` перед `-lfec`). + ### 4.4 Деплой ```bash