Simovits

Om SoapySDR

Den här bloggen ämnar att vara en guide till hur någon utan tidigare erfarenhet av att experimentera med Software Defined Radio (SDR) enheter, fort kan sätta upp en miljö där flera SDR enheter kan styras över nätverket, med hjälp av Pothos ramverket och modulen SoapySDR. De flesta stegen i guiden är formellt dokumenterade på [1], men eftersom Pothosramberket har betydligt mer omfattande funktionalitet än det som beskrivs här, så kan den här guiden förhoppningsvis vara till hjälp genom att sålla bort steg som inte är nödvändiga för en ny användare som fort vill komma igång och labba med flera fysiska SDR-enheter i ett GUI.

Arbetsstationen där GUIt ska användas kallas för klient, i detta exempel kör klienten OS Ubuntu 18.04. Datorerna som driver de fysiska SDR-enheterna kallas hosts, i detta exempel används två hosts av modell Raspberry Pi (RPI) Model B+ med Raspbian OS. Sedan ansluts två HackRF [2] till RPI hostsen. SoapySDR har emellertid stöd för majoriteten av konsument SDR-enheterna på marknaden, så som BladeRF, LimeSDR och RTL-SDR etc.

Det är bra att vara medveten om att en USB-port på RPI B+ ger tillräcklig ström för att driva en HackRF, men att detta förutsätter att RPIn är ansluten till en 5.1V/2.5A strömkälla.Alternativt, om ni använder någon annan SDR med ett behov av mer strömförsörning så bör ni använda en strömförsörjd USB-hubb. Om RPI matas mid svagare ström så kommer RPIn fortfarande att bootha och oftast kommer SDR-enhetrna starta och gå att hitta med lsusb, men de kommer att vara instabila och iband ge svåridentifierade fel.

Installera nödvändiga moduler på hosts:
Börja med att hämta dependencies:
sudo apt-get install \
cmake g++ \
libpython-dev python-numpy swig \
avahi-daemon libavahi-client-dev

Hämta, kompilera och installera SoapySDR, eftersom RPI B+ har en quad core cpu, används -j4 flaggan. Annars tar nedstående mycket tid på dessa hosts:
git clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR
mkdir build
cd build
cmake ..
make -j4
sudo make install
sudo ldconfig

Gör detsamma för SoapyRemote, men klona istället enligt nedan:
git clone https://github.com/pothosware/SoapyRemote.git

Om den fysiska SDR-enheten nu ansluts till hosten så bör den gå att hitta enheten med:
pi@raspberrypi:~ $ lsusb
Bus 001 Device 006: ID 1d50:6089 OpenMoko, Inc.

Enhetsdrivrutinerna, samt enhetsmodulerna till SoapySDR installeras innan SDR-enheten kan användas inom ramverket. Detta görs på följande vis:
sudo apt-get install hackrf libhackrf-dev
git clone https://github.com/pothosware/SoapyHackRF.git
mkdir build
cd build
cmake ..
make -j4
sudo make install.

Testa att enheten går att hitta, om allt är som det ska vara så förväntas output nedan:
pi@raspberrypi:~$ SoapySDRUtil –find
######################################################
## Soapy SDR — the SDR abstraction library ##
######################################################
Found device 0
device = HackRF One
driver = hackrf
label = HackRF One #0 a06063c8224e645f
part_id = a000cb3c00684f5d
serial = 0000000000000000a06063c8224e645f
version = 2017.02.1

Förbered klienterna:
Börja med att installera dependencies:
sudo apt-get install \
libnuma-dev cmake g++ \
libpython-dev python-numpy \
qtbase5-dev libqt5svg5-dev libqt5opengl5-dev libqwt-qt5-dev \
portaudio19-dev libjack-jackd2-dev \
graphviz swig git avahi-daemon libavahi-client-dev \
libmuparserx-dev \

Installer SoapySDR och SoapyRemote på samma vis som för hostsen, enligt ovan. Installera sedan PothosCore:
git clone –recursive https://github.com/pothosware/PothosCore.git
cd PothosCore
mkdir build
cd build
cmake ..
make -j4
sudo make install
sudo ldconfig
PothosUtil –self-tests

Observera att PothosCore måste kompileras med stöd för Soapy för att kunna hitta hostsen i resterande steg.  Om installationen sker i ordningen som beskrivs här så görs detta automatiskt. Verifiera att output från cmake för PothosCore anger att stöd för soapy ges vid kompileringstillfället.

Starta SoapySDRServer på hosten:
pi@raspberrypi:~ $ SoapySDRServer –bind=”tcp://192.168.1.101:1234″
######################################################
## Soapy Server — Use any Soapy SDR remotely
######################################################
Server version: 0.5.1-g5a647db9
Server UUID: 86658ea5-d16c-157b-8567-0436007f0101
Launching the server… tcp://192.168.1.102:1234
Server bound to 192.168.1.102:1234
Launching discovery server…
Connecting to DNS-SD daemon…
[INFO] Avahi version: avahi 0.6.32
[INFO] Avahi hostname: raspberrypi
[INFO] Avahi domain: local
[INFO] Avahi FQDN: raspberrypi.local
[INFO] avahi_entry_group_add_service(raspberrypi._soapy._tcp)
Press Ctrl+C to stop the server

På klienten bör det gå att hitta SDR-enheten över nätverket med:
SoapySDRUtil –probe.

Starta Pothos proxy-server på klienten:
user@host:~$ PothosUtil –proxy-server=”192.168.1.100:1234″

Starta PothosFlow GUI på klienten:
user@host:~$ PothosFlow

I ”Host Explorer” fyll in tcp://192.168.1.100:1234 i fältet ”Click to enter a new Host URI”. PothosFlow GUI är något buggigt och ifall fel parametrar fylls in under “Host Explorer” så kanNu är allting klart och det är bara att börja skapa flöden i GUIt, din HackRF bör gå att identifiera under ”System Info” för proxy-servern som körs på klienten. Sedan är det bara att börja labborera.

Det kan vara bra att veta att Pothos proxy-server (och även SoapySDRServer) kan krascha till och från, men det är bara att starta dem igen, inget arbete går förlorat. Detta är en stor del av vinningen med att använda detta ramverk.

GUI kan krascha om felaktiga parametrar ställ in i hosts explorer, det kan sedan fortsätta krascha direkt när GUI startas på nytt. Ta då bort de felaktiga fälten under direkt under [HostExplorer] configruationsfilen genom:
sudo nano /home/vl560/.config/Pothos/PothosFlow.conf

Jag hoppas att denna guide gör så att några av er som läst bloggen den här veckan känner att tröskeln för att börja labborera med SDR-enheter har blivit lite lägre.

[1] – https://github.com/pothosware/PothosCore/
[2] – https://greatscottgadgets.com/hackrf/
[3] – https://en.wikipedia.org/wiki/File:Graynella_packer.jpg