WSPR-RX auf einem Beaglebone Black

WSPR

ist eine Betriebsart, die auf maximale Reichweite bei kleinen Sendeleistungen getrimmt ist und dient zur Untersuchung von Ausbreitungsbedingungen.
Nähere Informationen kann man auf den Webseiten von K1JT sowie aufwsprnet.org finden.

Beaglebone Black

ist ein Experimentierboard mit ARM-Prozessor. Als Betriebssystem dient häufig ein Linux. Die Homepage zum Projekt: Beagleboard

Der WSPR-RX für ARM-Linux-Boards

ist ein Projekt von DJ0ABR und auf seiner Webseite sehr ausführlich beschrieben. Er betreibt den Dekoder auf einem BananaPi, auf dem ebenfalls Linux läuft. Daher habe ich seine Anleitung zur Installation als Basis genommen, um das Programm auf meinem Beaglebone Black laufen zu lassen. Im Folgenden möchte ich beschreiben, wie ich zu meinem Erfolgserlebnis kam.

 

Ursprünglich wollte ich den originalen Dekoder von K1JT benutzen (http://physics.princeton.edu/pulsar/K1JT/wspr.html), aber dieser benötigt einige Bibliotheken, unter anderem auch das neueste Python, was zu dem Zeitpunkt im aktuellen Debian Wheezy für armhf noch nicht verfügbar war.

Das und noch ein paar andere Problemchen konnte ich mit meinem Wissen über Linux nicht lösen; kurz darauf machte mich ein anderer OM auf die Lösung von DJ0ABR aufmerksam.

Ihr benötigt:

- einen Beaglebone Black Rev.C
- eine MicroSD-Karte mit mindestens 8 GB
- falls (wie bei mir) ein Display angeschlossen wird, sollte eine separate Spannungsversorgung angeschlossen werden, die Speisung über USB vom PC kann zu Instabilitäten führen.
- USB-Tastatur und -Maus (ich habe mich für eine Cordless-Tastatur mit Touchpad von Logitech entschlossen)
- einen USB-Hub (für Tastatur und Maus und Soundkarte)
- eine USB-Soundkarte (in meinem Fall eine Vigo von Speedlink)
- Netzwerkkabel und Anschluss ans Heimnetzwerk (geht prinzipiell auch über das USB-Kabel, kann aber auch mal Probleme machen)
- Zeit

1. Debian Linux auf SD-Karte ziehen

Diese Arbeit passiert am PC. Ich habe anders als Kurt Windows verwendet und werde daher an dieser Stelle auch kurz auf die Tools eingehen.

- von eLinux.org das Image herunterladen. Bei mir war es der Snapshot vom 22.10.:
https://rcn-ee.net/deb/testing/2014-10-22/lxde-4gb/BBB-eMMC-flasher-debian-7.7-lxde-4gb-armhf-2014-10-22-4gb.img.xz
- Das Archiv z.B. mit 7-zip entpacken, um die .img-Datei zu erhalten.
- Um das Image in bootfähiger Form auf die MicroSD-Karte zu bringen, verwende ich das Tool Win32DiskImager. Ihr wählt das Image aus, ebenso das Laufwerk der SD-Karte, überprüft nochmals, ob ihr das richtige Laufwerk ausgesucht habt, und startet dann mit Klick auf „Write“ den Schreibvorgang.

Warum nochmals überprüfen? Weil beim Schreiben das Laufwerk einmal plattgemacht wird! Wenn ihr also das falsche Laufwerk wählt... habt ihr ein anderes Problem als nur WSPR auf einem ARM-Board zum Laufen zu bringen. (Nein, mich hat es nicht erwischt)

Da die Karte passend zum Image partitioniert wird, hat die Karte hinterher erst einmal nur 4GB Speicher verfügbar, egal wie groß die Karte eigentlich ist. Nicht wundern.
Win32DiskImager meldet sich am Ende mit einer Meldung, dass der Schreibvorgang erfolgreich beendet wurde.
Die Karte kann jetzt aus dem Kartenleser genommen werden.

2. Debian Linux auf dem Beaglebone Black installieren

Der Beaglebone Black verfügt über 4GB eMMC-Speicher. Darauf wird jetzt das Linux installiert; danach könnt ihr ohne die Speicherkarte arbeiten oder diese komplett als Datenträger verwenden.

- Der Beaglebone Black ist von der Stromversorgung getrennt!
- Karte einlegen
- Den Knopf in der Nähe des Kartenslots (auf der Oberseite) drücken, gedrückt halten und dabei die Stromversorgung anschließen.
- Nach ein paar Sekunden den Knopf loslassen. Jetzt wird automatisch das Image auf den BBB installiert. Anfangs blinken die User-LEDs wild, nach ca. einer Viertelminute solltet ihr ein Lauflicht á la Knight Rider sehen.
- Nach ca. 10 Minuten leuchten dieselben LEDs dauerhaft. Die Installation ist damit beendet.
- Spannung abstecken, Karte entnehmen.
- Netzwerkkabel, USB-Hub mit Tastatur, Maus und Soundkarte anstecken und Monitor bzw. Display anschließen.
- Stromversorgung anstecken, es sollte jetzt Linux booten. Das Rootpasswort lautet übrigens temppwd.

3. Die allgemeinen Vorbereitungen

Im Folgenden kann man genauso vorgehen wie von DJ0ABR beschrieben. Bei mir hat sich das deutsche Layout zwar nicht aktiviert, aber die Befehle funktionieren alle wie auf dem Bananapi.

Und wenn Ihr schon die Zeitzone einstellt: mit apt-get install ntp wird ein Programm installiert, dass die Zeit über NTP-Server im Internet abgleicht. Damit habt ihr die für WSPR notwendige präzise Zeit.

Das Vergrößern der SD-Karte habe ich am PC mit Linux in einer virtuellen Maschine gemacht. Für das Folgende wird ein Linux-Filesystem benötigt, um die Zugriffsrechte auf ausführbare Dateien korrekt setzen zu können.

Bei der Installation der Pakete werden zusätzlich zu den von DJ0ABR genannten noch benötigt:
- automake
- libgtk2.0-0
- pkg-config
- glib
- libgdiplus
- unzip

Auch ich empfehle, an dieser Stelle ein Backup zu ziehen.

Für den BBB gibt es eine komfortable Möglichkeit: folgt den Anweisungen auf dieser Seite:http://elinux.org/BeagleBone_Black_Extracting_eMMC_contents

Prinzipiell ist das die Installation im Rückwärtsgang, es wird ein Image vom eMMC erstellt, das ihr dann bei Bedarf einfach wieder installieren könnt. (auch das ist auf der verlinkten Seite beschrieben)

4. Installation Mono (die für WSPR-RX benötigte Runtime)

Das ist der mit Abstand zeitaufwändigste Schritt von allen! Da für armhf auf Debian Wheezy nur Versionen existieren, von denen ich mir nicht sicher war, ob diese für mein Vorhaben geeignet sind, habe ich auf die Installation eines Debian-Pakets verzichtet und mono mit monolite compiliert.

Aus Platzgründen sollten die Sourcen von Mono direkt auf die MicroSD-Karte gezogen werden, ansonsten geht euch beim Kompilieren irgendwann der Platz aus. (irgendwann heisst: nach Stunden, kurz vor Ende... Halleluja!)

So findet ihr die Karte auf der Konsole:
sudo su (und Passwort anschliessend, damit ihr Admin-Rechte habt)

df -h (listet alle Filesysteme, unter /dev/mmcblk1p1 wird sich vermutlich eure Karte zeigen – schaut auf die Größenangaben)

Ihr könnt entweder direkt in das Mountverzeichnis wechseln oder erstellt euch selbst eines, das ihr dann mit mount /dev/... /euerVerzeichnis für die MicroSD nutzen könnt.

Wechselt nun in das Mountverzeichnis: cd /wasweissich/euerVerzeichnis

Nun könnt ihr Git installieren und die Mono-Sourcen herunterladen:

sudo apt-get install git

git clone git://github.com/mono/mono.git (20 Minuten Kaffeepause)

Wenn ihr wie ich auf eine Mono-Installation per apt-get verzichtet habt, benötigt ihr nun monolite, um mono kompilieren zu können:
- cd mono (jetzt seid ihr im MonoSourcen-Hauptverzeichnis)
- git submodule init
- git submodule update (beides vonhttp://www.genericmaker.com/2014/01/mono-for-beaglebone-black.html)
- ./autogen.sh --prefix=/usr/local (20 Minuten Kaffeepause)
- make get-monolite-latest
- make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/gmcs.exe (Damit erzeugt ihr den mcs-Compiler, der fürs Kompilieren von Mono benötigt wird)

do
{
20 Minuten Kaffeepause;
Kaffee verarbeiten;
Kaffee wegbringen;
}
while Kaffeevorrat >0
Kaffee kaufen;

Kein Scherz, das dauert mehrere Stunden (5-6, ich bin irgendwann schlafen gegangen)
Eine Alternative wäre Cross-Compiling auf dem PC, aber dazu bin ich zuwenig Experte und bereits einmal gescheitert.

Jetzt könnt ihr Mono kompilieren und installieren (make, make install)

Das dauert jetzt keine Stunden mehr, da ein Großteil ja bereits kompiliert wurde.

Reboot...

5. K9AN-Dekoder installieren und Sound einrichten

- wechselt in das Home-Verzeichnis des Debian-Users
- Folgt der Anleitung von Kurt zum Installieren des Kommandozeilenprogramms
- anschließend erzeugt im Verzeichnis wsprcan-master ein Unterverzeichnis wav (mkdir wav)
- Wenn beim Testen mit einer Wave-Datei ein Fehler kommt, kann es daran liegen, dass die USB-Soundkarte als „card1“ eingetragen wird, das Programm aber „card0“ benutzt. Zur Lösung des Problems habe ich die Webseite http://andicelabs.com/2014/03/usb-audio-beaglebone/
gefunden und in der Konfigurationsdatei /etc/modprobe.d/alsa-base.conf den Eintrag

options snd-usb-audio index=-2

abgeändert in

options snd-usb-audio index=0

Mit aplay -l könnt ihr die Auswirkungen vorher/nachher überprüfen. Nun sollte der Test mit arecord / aplay und das dekodieren funktionieren.

6. Installation der grafischen Benutzeroberfläche – es geht auf die Zielgerade!

- Folgt wieder der Anleitung von Kurt. Evtl. müsst ihr dem Skript makefft die Ausführungsrechte geben; ich habe mit „chmod 777 makefft“ einfach faulheitshalber volle Rechte zugeteilt.

Wenn alles funktioniert hat, sollte nun WSPR-RX laufen.

Zur Performance: der BBB ist ein Single-Core, hat daher nicht ganz so viel Leistung wie der BananaPi; Aufnahme und Dekodierung laufen dennoch gleichzeitig und je nach Signal dauert die Dekodierung zwischen 30 und 100 Sekunden, zu einem „Dekodier-Stau“ kam es bei mir noch nicht.

P.S.: FLDigi lässt sich leichter installieren: apt-get install fldigi - fertig! Benötigt aber fast ständig 100% Prozessorlast.