Script de instalare SDRPlay: Diferență între versiuni

De la YO3ITI
Sari la navigare Sari la căutare
Fără descriere a modificării
Fără descriere a modificării
Linia 1: Linia 1:
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 https://github.com/yo3iti/Dual-SDR-install.git]
Acest script se găsește și pe github la adresa [https://github.com/yo3iti/Dual-SDR-install.git https://github.com/yo3iti/Dual-SDR-install.git]



Versiunea de la data 9 aprilie 2026 21:03

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"