// SDR IP SERVER BUILD GUIDE

Orange Pi Zero 3Complete SDR IP Server

Everything on one low-cost SBC: 3 receivers, 4 switchable antennas, 30+ decoders — HF to satellite. Controlled entirely from Android.

Armbian 13 Trixie Legacy Kernel 6.6.75 Airspy HF+ RTL-SDR Blog V4 ADS-B + AIS + APRS FT8 + ACARS + HFDL HMC241 RF Switch Android Control
SCROLL
01

Introduction

After nearly one year of kernel crashes, WiFi driver panics, and instability, this configuration has proven rock-solid for 24/7 SDR server operation on the Orange Pi Zero 3 (Allwinner H618 SoC).

The design goal: a compact, low-power, fully headless SDR server accessible entirely over the network — including from an Android smartphone, with no desktop PC required for day-to-day operation.

KEY DISCOVERY The 'current' kernel crashes within hours on this board. The 'legacy' kernel 6.6.75 is the only stable option for SDR server use.
OS
Armbian 13
Trixie — Debian 13
Kernel
6.6.75-legacy
sunxi64 — NOT current
SDR Receivers
3 simultaneous
RTL-SDR V4 + HF+ + ADS-B
Antennas
4 switchable
HMC241 GaAs SP4T
Decoders
30+
FT8 to ADS-B to Satellite
PC Required?
Zero
Full Android control
02

Hardware

Main Board & Power

ComponentDetails
SBCOrange Pi Zero 3 — Allwinner H618, quad-core Cortex-A53 @ 1.5 GHz
RAM1.5 GB LPDDR4
NetworkGigabit Ethernet — WiFi completely disabled
PowerOfficial Raspberry Pi 5V/3A USB-C adapter
USBSDR dongles plug directly into the Orange Pi Zero 3 USB hat connector — no external hub
EnclosureCustom box — SBC, RF switch, filters, all cabling inside

SDR Receivers

RTL-SDR BLOG V4 HF NOTE RTL-SDR Blog V4 has a built-in HF upconverter — it receives HF frequencies natively. No direct sampling mode needed. Simply tune below 28.8 MHz.
DeviceFrequencyRoleHF Capability
RTL-SDR Blog V4500 kHz – 1766 MHzGeneral purpose RXBuilt-in HF upconverter
RTL-SDR (ADS-B)1090 MHzADS-B aircraft tracking
Airspy Discovery HF+0.5 kHz – 31 MHz + VHFHF + VHF high dynamic rangeNative HF, best-in-class

RF Switch — HMC241 (Analog Devices GaAs SP4T)

The Airspy Discovery HF+ is connected through an HMC241 GaAs MMIC SP4T switch, allowing SpyServer to select between 4 antennas via 2 GPIO pins.

SpecValue
PartHMC241ALP3E — Analog Devices / Hittite
TypeGaAs MMIC SP4T Non-Reflective Switch
FrequencyDC to 4 GHz
Insertion Loss0.7 dB @ 2 GHz
Isolation43 dB @ 2 GHz
Control2-pin TTL/CMOS — integrated 2:4 decoder on chip
Supply3V–5V — powered from Orange Pi 3.3V GPIO pin

GPIO Truth Table — Antenna Selection

CTRL_ACTRL_BPortAntenna
00RF1Quadrifilar helix 145 MHz — self-built, LEO satellites, circularly polarized
10RF2V-dipole 137 MHz — NOAA/Meteor weather satellites
01RF3YouLoop — passive magnetic loop for HF
11RF416.5m random wire — broadband HF

Antennas

AntennaBandNotes
Quadrifilar Helix (QFH)145 MHzSelf-built — circularly polarized, excellent for LEO satellite passes
V-dipole137 MHzNOAA/Meteor-M weather satellite image reception
YouLoopHFNoise-cancelling passive magnetic loop — excellent in urban environments
16.5m random wireHF broadbandWide HF coverage via 9:1 unun + toroid choke
ADS-B antenna1090 MHzDirect to RTL-SDR ADS-B dongle
DisconeVHF/UHF broadbandDirect to RTL-SDR Blog V4

RF Filtering & Chokes

03

The Critical Choice — Legacy Kernel

WARNING — READ THIS FIRST The 'current' kernel crashes within hours on Orange Pi Zero 3 under SDR load. One year of testing confirmed this. Always install the legacy kernel.
BranchPackageResult
current linux-image-current-sunxi64 CRASH within hours
legacy ✓ linux-image-legacy-sunxi64 STABLE — days of uptime

Install Legacy Kernel

sudo apt install linux-image-legacy-sunxi64 linux-dtb-legacy-sunxi64
sudo reboot
uname -r   # Expected: 6.6.75-legacy-sunxi64
04

SDR Software Stack

SoftwareProtocol / PortSDR DeviceClient
OpenWebRX+Web — :8073Airspy HF+ / RTL-SDR V4Any browser
SpyServerTCP — :5432Airspy HF+ via RF switchSDR++Brown, SDRAngel
rtl_tcp (V4)TCP — :1234RTL-SDR Blog V4SDR++Brown, SDRAngel, GQRX
rtl_tcp (ADS-B)TCP — :1235RTL-SDR ADS-B dongledump1090, Virtual Radar
Radiosonde auto_rxWeb — custom portRTL-SDR V4Any browser

Package Repositories

SoftwareSource
OpenWebRX+repo.openwebrx.de/debian/ bookworm main
OpenWebRX Plus (luarvique)luarvique.github.io/ppa/trixie ./
RTL-SDR Blog V4 driversRTL-SDR Blog official repo — rtl-sdr.com (NOT Debian repo)
SpyServerairspy.com/download/ — arm64 binary, manual install
Radiosonde auto_rxgithub.com/projecthorus/radiosonde_auto_rx
SoapySDR / Airspy HF+apt install soapysdr-module-airspyhf (then apply library fix — Section 6)
05

Supported Decoders — 30+

All decoders run simultaneously on the same hardware. Grouped by band and protocol type:

HF Decoders

FT8
FT4
WSPR
JT65
JT9
CW
CW Skimmer
RTTY
SITOR-B
NAVTEX
HFDL
DRM
FreeDV
FAX/WEFAX
SSTV
SAM
SELCALL

VHF / Marine / Aviation

AIS
APRS
ADS-B
ACARS
VDL Mode 2
RDS
DAB

Digital Voice

DMR
D-Star
YSF
NXDN
P25
POCSAG
FLEX

IoT & Sensors

ISM / rtl_433
Weather Stations
TPMS
Smart Meters

Satellite & Radiosonde

NOAA APT
Meteor-M LRPT
RS41 Radiosonde
RS92
DFM09
M10 / M20

SDR++Brown Exclusive

Baseband NR
Audio NR (logMMSE)
Audio NR (OMLSA)
FT8 built-in
KiwiSDR client
06

Critical System Tweaks

1 — RTL-SDR DVB Module Blacklist

Linux loads DVB-T drivers for RTL-SDR dongles by default. Blacklist them:

blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
install dvb_usb_rtl28xxu /bin/true
install rtl2832 /bin/true
sudo update-initramfs -u && sudo reboot

2 — Disable WiFi & Bluetooth (aw859a)

The H618 WiFi driver causes kernel instability. Mask and blacklist completely:

sudo systemctl mask aw859a-wifi.service
sudo systemctl mask aw859a-bluetooth.service
# Add to /etc/modprobe.d/wifi-blacklist.conf:
blacklist sprdwl_ng
blacklist uwe5622_bsp_sdio
blacklist panfrost

3 — CPU Governor: schedutil

Default 'performance' governor keeps CPU at max. schedutil scales dynamically. Temperature dropped ~8-10°C.

echo schedutil | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
sudo sed -i 's/^GOVERNOR=.*/GOVERNOR=schedutil/' /etc/default/cpufrequtils
sudo sed -i 's/^ENABLE=false/ENABLE=true/' /etc/default/cpufrequtils

4 — USB Autosuspend (Critical for SDR Dongles)

Without this, USB dongles enter sleep and become unresponsive. Add to /boot/armbianEnv.txt extraargs:

usbcore.autosuspend=-1

5 — Disable Unnecessary Services

sudo systemctl disable --now exim4
sudo truncate -s 0 /var/log/exim4/paniclog
sudo systemctl mask systemd-networkd-wait-online
sudo systemctl mask systemd-networkd-wait-online@.service
sudo systemctl mask alsa-utils.service
sudo systemctl mask fake-hwclock.service

6 — SoapySDR / SpyServer Library Conflict

CRITICAL FIX When SoapySDR updates, it overwrites libairspyhfSupport.so with an incompatible version. SpyServer silently fails. OpenWebRX keeps working. This is the most common post-update breakage.
# Copy working version from /usr/local to system path
sudo cp /usr/local/lib/SoapySDR/modules0.8/libairspyhfSupport.so \
        /usr/lib/SoapySDR/modules0.8/libairspyhfSupport.so

# Lock BOTH files — apt can never overwrite them
sudo chattr +i /usr/lib/SoapySDR/modules0.8/libairspyhfSupport.so
sudo chattr +i /usr/local/lib/SoapySDR/modules0.8/libairspyhfSupport.so

# Verify — look for 'i' in the output
lsattr /usr/lib/SoapySDR/modules0.8/libairspyhfSupport.so
# Expected: ----i---------e------- .../libairspyhfSupport.so

To update the library manually in the future:

sudo chattr -i /usr/lib/SoapySDR/modules0.8/libairspyhfSupport.so
# ... make changes, then re-lock:
sudo chattr +i /usr/lib/SoapySDR/modules0.8/libairspyhfSupport.so
07

RF Switch GPIO Control

The HMC241 is controlled by two GPIO pins. A Python script selects the active antenna — callable from SpyServer or the SSH Button Android app.

WIRING NOTE HMC241 is TTL/CMOS compatible. Orange Pi Zero 3 GPIO is 3.3V — connect directly, no level shifter needed. Power the switch from the 3.3V GPIO pin.

Python GPIO Control

import OPi.GPIO as GPIO

GPIO.setmode(GPIO.SUNXI)
CTRL_A = 'PA6'   # Adjust to your wiring
CTRL_B = 'PA7'   # Adjust to your wiring
GPIO.setup(CTRL_A, GPIO.OUT)
GPIO.setup(CTRL_B, GPIO.OUT)

def select_antenna(port):  # port = 1, 2, 3 or 4
    GPIO.output(CTRL_A, port & 1)
    GPIO.output(CTRL_B, (port >> 1) & 1)

SpyServer Config

bind_host = 0.0.0.0
bind_port = 5432
list_in_directory = 1
08

Full Android Control — No PC Required

Complete operation from an Android smartphone. Every function of the SDR server is accessible without touching a desktop computer.

📻
SDR++Brown
The recommended client for HF. Fork of SDR++ by Sanny Sanoff with Android-optimized UI and unique signal processing. The only SDR software applying noise reduction to the entire wideband IQ stream — visible in the waterfall. Remarkable for weak HF signals.
SpyServer :5432 rtl_tcp :1234 Baseband NR FT8 built-in DSD decoder KiwiSDR
📡
SDRAngel
Full-featured SDR application with excellent Android support. Supports ADS-B, AIS, APT satellite, RS41 Radiosonde, APRS, digital voice and more.
SpyServer rtl_tcp ADS-B map APT satellite Radiosonde
🌐
Samsung Internet Browser
Use Samsung Browser instead of Chrome for OpenWebRX+ and Radiosonde tracker. Smoother waterfall rendering, better touch interaction on the frequency controls.
OpenWebRX+ :8073 Radiosonde web Better waterfall
SSH Button
One-tap SSH command execution. Used for RF switch antenna selection and service management. No need to open a full terminal for routine operations.
Antenna 1: rfswitch.py 1 Antenna 2: rfswitch.py 2 Start/stop services
09

Quick Setup Checklist

10

Developed with Claude AI

This entire SDR server setup — from diagnosing kernel crashes to fixing the SoapySDR library conflict, optimizing system services, and writing this guide — was developed collaboratively with Claude, the AI assistant by Anthropic.

Over multiple sessions, Claude helped:

  • ◆ Identify the legacy vs current kernel issue after 1 year of failed attempts
  • ◆ Analyze system logs in real time and fix every warning and error
  • ◆ Discover and resolve the SoapySDR / SpyServer library conflict
  • ◆ Optimize CPU governor, USB power management, and services
  • ◆ Research and verify the HMC241 RF switch GPIO wiring
  • ◆ Write and format this complete documentation
"I spent a year fighting this board alone. With Claude, we solved everything in a few sessions — logs, kernel choice, library conflicts, GPIO wiring, the whole setup."

Claude is available at claude.ai — highly capable for technical problem solving, embedded Linux, RF engineering, and system administration. If you are building an SDR server or debugging embedded Linux, Claude can save you days of work.

11

Summary

MetricResult
Uptime3+ days continuous — zero crashes
SDR receivers3 simultaneous (RTL-SDR Blog V4, ADS-B, Airspy HF+)
Switchable antennas4 via HMC241 GaAs SP4T RF switch
ProtocolsSpyServer :5432, rtl_tcp :1234/:1235, OpenWebRX+ web, Radiosonde web
Android clientsSDR++Brown, SDRAngel, Samsung Browser, SSH Button
Desktop PC needed?No — full Android operation
CPU temperature~45-55°C with schedutil governor
Power5V/3A — official Raspberry Pi adapter
Developed withClaude AI — claude.ai by Anthropic
SHARE THIS It took a year to figure this out. Post it on forum.armbian.com and r/RTLSDR — save others the trouble.