Script de instalare SDRPlay

De la YO3ITI
Sari la navigare Sari la căutare

Script pentru instalarea tuturor pachetelor necesare pentru utilizarea SDRPlay pe Raspberry Pi. Acest script se găsește și pe github la adresa https://github.com/yo3iti/Dual-SDR-install.git

Este foarte important să se instaleze înainte driverele oficiale pentru SDRPlay.

#!/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"