Wiki-Bereiche:

Informationstechnik (IT)
Hobbys

Artikel in diesem Bereich:

Zum Ende der Metadaten springen
Zum Anfang der Metadaten springen

Am Beispiel der Erstellung eines neuen GNU Radio Blocks für die Miller-Dekodierung soll erläutert werden, welche allgemeinen Schritte hierzu nötig sind.

Diese Anleitung gilt nur für GNU Radio Blocks in der Version 3.2.2. Die aktuellste Version 3.3.0 wurde wie folgt umstrukturiert:
  • Das doc Verzeichnis ist rausgeflogen
  • Alles was vorher in ./src lag, z.B. ./src/lib oder ./src/python liegt jetzt direkt im Hauptverzeichnis des Blocks, also ./lib und ./python
  • Die swig-Dateien *.i liegen nicht mehr mit den CPP-Sourcefiles in lib, sondern in einem eigenen Verzeichnis ./swig
  • Die swig-Dateien wurden pro Block in separate Dateien aufgeteilt:
    • Hauptdatei: ./swig/howto.i
    • Für z.B. den Block "square": ./swig/howto_square_ff.i

Beispiel-Block als Vorlage vorbereiten

Auf dem GNU FTP-Server liegen GNU Radio Beispiel-Block-Implementierung in unterschiedlichen Versionen bereit:

Diese Anleitung basiert auf Gnuradio Version 3.2.2. Wir laden den passenden Beispiel-Code herunter, packen ihn aus und benennen das Unterverzeichnis passend zu unserem neuen Block um.

Um alle nachfolgenden Schritte möglichst generisch beschreiben zu können, verwenden wir für die spezifischen Inhalte dieser Anleitung Shell-Umgebungsvariablen als Platzhalter:

Beschreibungen anpassen

Die projektbeschreibenden Dateien AUTHORS, ChangeLog und README nach Belieben anpassen:

Docs entfernen

Da lieber im Wiki dokumentiert und die Anzahl der anzupassenden Dateien gering gehalten werden sollen, entfernen wir die Docs aus dem Block:

Autoconfig und Automake-Dateien anpassen

In configure.ac Blocknamen und Version anpassen:

In src/lib/Makefile.am und src/python/Makefile.am Referenz zu zweiter Sourcedatei entfernen und Pfade zu Dateinamen anpassen:

Schließlich noch die src/lib/Makefile.swig.gen anpassen:

Sourcedateien umbenennen

Nun benennen wir die Sourcedateien um und entfernen dabei auch die zusätzlichen Sourcedateien "howto_square2_ff*":

Sourcedateien anpassen

Nun müssen wir die verschiedenen Sourcedateien anpassen. Wir beginnen mit der src/lib/miller.i, in der wir alle Vorkommnisse des Paketnamens "howto" und der Funktion "square_ff" in die entsprechenden neuen Namen ändern und wieder die Referenz auf die zweite Sourcedatei entfernen:

Die gleichen Ersetzungen führen wir bei src/lib/miller_decode.* und src/python/qa_miller.py durch. Außerdem werden die DEFINEs in der Header-Datei umbenannt und die zweite Funktion aus dem qa-Testdatei qa_miller.py entfernt:

Eigenen Code einsetzen

Nun sind alle Dateien vorbereitet, dass eigener Code eingesetzt werden kann. Die ersten Anpassungen dazu betreffen die folgenden Stellen in der src/lib/miller_decode.cc.

Zunächst muss konfiguriert werden, wie viele Eingangs- und Ausgangsdaten verarbeitet werden sollen:

Im Konstruktur wird u.a. konfiguriert, von welchem Typ die Eingangs- und Ausgangsdaten sind. In diesem Beispiel float:

Die eigentliche Bearbeitung der Eingangsdaten erfolgt in der Funktion general_work(). Die Funktion castet zunächst die Eingangs- und Ausgangspointer, verarbeitet die Eingangsdaten und erzeugt Ausgangsdaten, gibt mit consume_each() an, wie viele Eingangsdaten verarbeitet wurden und gibt als Funktionsrückgabewert die Anzahl der erzeugten Ausgabedaten an:

Nach Anpassungen des Verarbeitungscode muss anschließend die Testfunktionen in der src/python/qa_miller.py entsprechend angepasst werden:

Weitere Informationen zur Erstellung eines eigenen GNU Radio Blocks findet sich auf dieser GNU Radio Webseite.

Neuen Block kompilieren

Zunächst löschen wir die alten Makefiles und generieren einmal alle configure- und Makefile-Dateien neu:

Nun kann wie gewohnt kompiliert werden:

Falls Python unter Mac OS X mit MacPorts installiert wurde, muss der Configure-Prefix entsprechend gesetzt werden:

Falls unter Ubuntu/Debian Probleme beim Linken (im Make-Prozess) auftreten sollten, folgende Umgebungsvariablen vor dem Kompilieren setzen:

Geben Sie Stichwörter ein, die dieser Seite hinzugefügt werden sollen:
Please wait 
Sie suchen ein Stichwort? Beginnen Sie einfach zu schreiben.