Script de instalare SDRPlay
Acest script se găsește și pe github la adresa https://github.com/yo3iti/Dual-SDR-install.git
#!/bin/bash
# install_sdr_fixed.sh - Fixed installation script for Raspberry Pi
set -e
echo "===== SDR Interface Installation (Fixed) ====="
# Check if running as root
if [ "$EUID" -eq 0 ]; then
echo "WARNING: Don't run as root during build. Run specific commands with sudo."
echo "Usage: ./install_sdr_fixed.sh"
exit 1
fi
# Update system
echo "[1/7] Updating system..."
sudo apt-get update
sudo apt-get upgrade -y
# Install system dependencies
echo "[2/7] Installing system packages..."
sudo apt-get install -y \
python3-pip \
python3-dev \
build-essential \
cmake \
git \
libusb-1.0-0-dev \
pkg-config \
libxml2-dev \
bison \
flex \
libavahi-client-dev \
libavahi-common-dev \
libserialport-dev \
libcdk5-dev \
libaio-dev \
libzstd-dev
# Create build directory
BUILD_DIR="$HOME/sdr_build"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
# ===== STEP 1: Install libiio FIRST (critical!) =====
echo "[3/7] Installing libiio..."
if [ -d "libiio" ]; then
rm -rf libiio
fi
git clone https://github.com/analogdevicesinc/libiio.git
cd libiio
git checkout v0.25 # Use stable version
mkdir -p build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DWITH_SERIAL_BACKEND=ON \
-DENABLE_IPV6=ON
make -j$(nproc)
sudo make install
sudo ldconfig
# Verify libiio installation
if ! pkg-config --exists libiio; then
echo "ERROR: libiio pkg-config not found"
exit 1
fi
echo "libiio installed successfully"
cd "$BUILD_DIR"
# ===== STEP 2: Install libad9361 with proper linking =====
echo "[4/7] Installing libad9361..."
if [ -d "libad9361-iio" ]; then
rm -rf libad9361-iio
fi
git clone https://github.com/analogdevicesinc/libad9361-iio.git
cd libad9361-iio
# Fix CMakeLists.txt to link libiio properly
cat > CMakeLists_fix.patch <<'EOF'
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,9 @@
cmake_minimum_required(VERSION 2.8.7)
project(ad9361 C)
+# Find libiio
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(LIBIIO REQUIRED libiio)
+
set(LIBAD9361_VERSION_MAJOR 0)
set(LIBAD9361_VERSION_MINOR 2)
set(LIBAD9361_VERSION ${LIBAD9361_VERSION_MAJOR}.${LIBAD9361_VERSION_MINOR})
@@ -32,6 +35,8 @@ add_library(ad9361 SHARED ${LIBAD9361_SOURCES})
set_target_properties(ad9361 PROPERTIES
VERSION ${LIBAD9361_VERSION}
SOVERSION ${LIBAD9361_VERSION_MAJOR}
+ LINK_FLAGS "${LIBIIO_LDFLAGS}"
+ COMPILE_FLAGS "${LIBIIO_CFLAGS}"
)
target_link_libraries(ad9361 LINK_PRIVATE ${LIBIIO_LIBRARIES})
EOF
# Apply patch if CMakeLists doesn't already link libiio
if ! grep -q "pkg_check_modules(LIBIIO" CMakeLists.txt; then
patch -p1 < CMakeLists_fix.patch || true
fi
mkdir -p build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DLIBIIO_INCLUDEDIR=/usr/local/include \
-DLIBIIO_LIBDIR=/usr/local/lib
make -j$(nproc)
sudo make install
sudo ldconfig
echo "libad9361 installed successfully"
cd "$BUILD_DIR"
# ===== STEP 3: Install SoapySDR =====
echo "[5/7] Installing SoapySDR..."
if [ -d "SoapySDR" ]; then
rm -rf SoapySDR
fi
git clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR
git checkout soapy-sdr-0.8.1 # Stable version
mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
sudo ldconfig
echo "SoapySDR installed successfully"
cd "$BUILD_DIR"
# ===== STEP 4: Install SDRPlay API (if you have SDRPlay) =====
echo "[6/7] SDRPlay setup..."
echo "NOTE: SDRPlay requires manual API installation from https://www.sdrplay.com/downloads/"
echo "After installing SDRPlay API, install SoapySDRPlay3:"
echo ""
read -p "Do you have SDRPlay API installed? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
if [ -d "SoapySDRPlay3" ]; then
rm -rf SoapySDRPlay3
fi
git clone https://github.com/pothosware/SoapySDRPlay3.git
cd SoapySDRPlay3
mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
sudo ldconfig
echo "SoapySDRPlay3 installed successfully"
else
echo "Skipping SoapySDRPlay3 installation"
fi
cd "$BUILD_DIR"
# ===== STEP 5: Install Python packages =====
echo "[7/7] Installing Python packages..."
# Upgrade pip
pip3 install --upgrade pip
# Install basic packages
pip3 install numpy scipy matplotlib pyyaml tqdm
# Install pyadi-iio (for PlutoSDR)
pip3 install pyadi-iio
# Install SoapySDR Python bindings
cd "$BUILD_DIR/SoapySDR"
cd python
pip3 install .
echo ""
echo "===== Installation Complete ====="
echo ""
echo "Installed components:"
echo " - libiio (for PlutoSDR)"
echo " - libad9361 (for PlutoSDR)"
echo " - SoapySDR"
echo " - Python packages"
echo ""
echo "Testing installations:"
echo ""
# Test libiio
echo "Testing libiio..."
if command -v iio_info &> /dev/null; then
echo "✓ iio_info available"
iio_info -V
else
echo "✗ iio_info not found"
fi
# Test SoapySDR
echo ""
echo "Testing SoapySDR..."
if command -v SoapySDRUtil &> /dev/null; then
echo "✓ SoapySDRUtil available"
SoapySDRUtil --info
else
echo "✗ SoapySDRUtil not found"
fi
# Test Python imports
echo ""
echo "Testing Python imports..."
python3 << EOF
import sys
try:
import numpy
print("✓ numpy")
except:
print("✗ numpy")
try:
import scipy
print("✓ scipy")
except:
print("✗ scipy")
try:
import adi
print("✓ pyadi-iio (PlutoSDR)")
except:
print("✗ pyadi-iio")
try:
import SoapySDR
print("✓ SoapySDR")
except:
print("✗ SoapySDR")
EOF
echo ""
echo "Quick start:"
echo ""
echo "For PlutoSDR (USB):"
echo " iio_info -u ip:192.168.2.1"
echo " python3 -c 'import adi; sdr=adi.Pluto(\"ip:192.168.2.1\"); print(sdr)'"
echo ""
echo "For SDRPlay:"
echo " SoapySDRUtil --probe=driver=sdrplay"
echo ""
echo "Clean up build files:"
echo " rm -rf $BUILD_DIR"