Entwicklung - Einrichten einer Entwicklungsumgebung
K (→KDevelop einrichten) |
Hulk (Diskussion | Beiträge) K (→Motivation) |
||
(27 dazwischenliegende Versionen von 15 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
==Motivation== | ==Motivation== | ||
− | Jeder der sich vornimmt ein paar Zeilen Code für VDR zu programmieren | + | Jeder der sich vornimmt ein paar Zeilen Code für [[VDR]] zu programmieren - sei es ein Plugin oder ein Patch - kommt früher oder später nicht um eine richtige Entwicklungsumgebung rum. Es ist nämlich viel zu mühsam auf einem Wohnzimmer-VDR zu entwickeln. Hier sollen ein paar Tipps gegeben werden, wie man bequem auf seinem Desktop-PC entwickeln kann. |
− | ==Grundfunktionen | + | |
+ | ==Grundfunktionen der Entwicklungsumgebung== | ||
Es gibt mindestens zwei Eigenschaften die eine VDR-Entwicklungsumgebung bieten sollte. | Es gibt mindestens zwei Eigenschaften die eine VDR-Entwicklungsumgebung bieten sollte. | ||
* Bequemes programmieren | * Bequemes programmieren | ||
Zeile 11: | Zeile 12: | ||
Diese Anleitung soll zeigen wie man eine Entwicklungsumgebung mit KDevelop, VDR und dem Xine-Plugin aufbauen kann. | Diese Anleitung soll zeigen wie man eine Entwicklungsumgebung mit KDevelop, VDR und dem Xine-Plugin aufbauen kann. | ||
+ | |||
==Einrichten von VDR== | ==Einrichten von VDR== | ||
− | Beim | + | Beim Einrichten von VDR ist nicht viel zu beachten. |
Nur ist es beim Verwenden vom Xine-Plugin nicht nötig die DVB-Treiber zu installieren, da das xine-plugin als Device erkannt wird. Trotzdem müssen die Header der Treiber an der richtigen Stelle liegen.(wie in der Beschreibung zum Treiber beschrieben) | Nur ist es beim Verwenden vom Xine-Plugin nicht nötig die DVB-Treiber zu installieren, da das xine-plugin als Device erkannt wird. Trotzdem müssen die Header der Treiber an der richtigen Stelle liegen.(wie in der Beschreibung zum Treiber beschrieben) | ||
Bitte folge dieser Anleitung: [[VDR Installation]] | Bitte folge dieser Anleitung: [[VDR Installation]] | ||
==Einrichten von Xine-Plugin== | ==Einrichten von Xine-Plugin== | ||
− | Das | + | Das Einrichten des Xine-Plugins wurde hier genauer beschrieben: [[Xine-plugin]] |
==Einrichten von Xine-Player== | ==Einrichten von Xine-Player== | ||
Neben dem Xine-Plugin muss auch noch der Xine Player richtig installiert werden:[[Xine-plugin]] | Neben dem Xine-Plugin muss auch noch der Xine Player richtig installiert werden:[[Xine-plugin]] | ||
− | ==KDevelop einrichten== | + | Alternativ kann man hier auch sehr schön den [http://sourceforge.net/projects/xinevdr XineVDR] Player verwenden. |
+ | |||
+ | ==Integrierte Entwicklungsumgebung einrichten== | ||
+ | |||
+ | Wer ein wenig mehr Komfort bei der Bearbeitung seiner Quelltexte wünscht, wird eine integrierte Entwicklungsumgebung einrichten wollen. Vorteile einer integrierten Entwicklungsumgebung sind je nach Ausstattung: | ||
+ | |||
+ | * Syntax Higlighting, Auto Completion | ||
+ | * Class Browsing, C/C++ Parsing während der Eingabe, Automatisches Build nach dem Speichern | ||
+ | * Auto Indentation, Auto Format | ||
+ | * etc, etc | ||
+ | |||
+ | Neben kommerziellen Produkten, existieren im Linux Umfeld einige frei verfügbare Entwicklungsumgebungen. Dazu gehören z.B. [http://kdevelop.org/ KDevelop], [http://www.eclipse.org/ eclipse] mit CDT und [http://anjuta.org/ Anjuta]. | ||
+ | |||
+ | ===KDevelop einrichten=== | ||
Fast alle Distributionen liefern KDevelop mit aus. Daher wird die Installation hier nicht weiter beschieben. | Fast alle Distributionen liefern KDevelop mit aus. Daher wird die Installation hier nicht weiter beschieben. | ||
Zeile 29: | Zeile 44: | ||
Wenn sie dann also cDevice:: + strg + Space eingeben, dann werden ihnen alle Möglichkeiten der Codekomplementierung angezeigt. Das selbe gilt für Methoden von Objekten oder Elementen von Datenstrukturen. | Wenn sie dann also cDevice:: + strg + Space eingeben, dann werden ihnen alle Möglichkeiten der Codekomplementierung angezeigt. Das selbe gilt für Methoden von Objekten oder Elementen von Datenstrukturen. | ||
+ | |||
+ | ===Eclipse einrichten=== | ||
+ | |||
+ | Eclipse ist eine plattformübergreifende Entwicklungsumgebung auf Basis von java. Als Voraussetzung benötigt man also ein JRE (java runtime environment) oder SDK (java development kit). Bei den meisten Distribution ist das bereits enthalten. Auch eclipse ist in den meisten Fällen schon Bestandteil der Distribution. Eine manuelle Installation ist aber denkbar einfach. Dazu von [http://www.eclipse.org] zunächst das Platform SDK für Linux als tgz herunterladen und im Dateisystem entpacken. Als Beispiel wählen wir das Verzeichnis <code>/usr/share/eclipse</code>. Wer möchte kann noch einen Link von <code>/usr/share/eclipse/eclipse</code> auf <code>/usr/bin/eclipse</code> anlegen. Danach die C/C++ Development Tools (CDT) herunterladen und in das gleiche Verzeichnis wie eclipse entpacken. Das war alles. | ||
==Neues Plugin erstellen== | ==Neues Plugin erstellen== | ||
− | Das | + | Das Erstellen eines neuen Plugins ist unter VDR recht einfach. In dem Verzeichniss von VDR gibt es ein Skript mit dem Namen "newplugin". Dieses läßt sich recht einfach mit |
::newplugin <name> | ::newplugin <name> | ||
− | aufrufen. Das Skript erstellt im Verzeichniss VDR/PLUGINS/src/ ein neues Plugin. Dieses Plugin gilt es nun mit Leben zu füllen. | + | aufrufen. Das Skript erstellt im Verzeichniss VDR/PLUGINS/src/ ein neues Plugin. Dieses Plugin gilt es nun mit Leben zu füllen. |
+ | |||
+ | ==Plugin mit der integrierten Entwicklungsumgebung programmieren== | ||
+ | |||
+ | === Mit KDevelop ... === | ||
− | |||
Um jedoch nun das Plugin unter KDevelop programmieren zu können, müssen wir erstmal aus dem Makefile ein KDevelop Projekt erstellen. Dieses kann man unter | Um jedoch nun das Plugin unter KDevelop programmieren zu können, müssen wir erstmal aus dem Makefile ein KDevelop Projekt erstellen. Dieses kann man unter | ||
::Projekt->Projekt importieren... | ::Projekt->Projekt importieren... | ||
− | In dem | + | In dem Dialog wählt man das Verzeichnis, in dem das neu erstelle Plugin liegt. Der Projektname wird richtig übernommen. Wir müssen nur noch den Projekttyp wählen. |
Ich habe hier immer "Generic C++ Application (Automake based)" genommen. | Ich habe hier immer "Generic C++ Application (Automake based)" genommen. | ||
Im vdr haben alle C Dateien die Endung *.c. | Im vdr haben alle C Dateien die Endung *.c. | ||
− | Da wir C++ | + | Da wir in C++ programmieren und alle von KDevelop erzeugten Dateien die Endung .cpp haben, ändern wir diese auch in *.c |
+ | === Mit eclipse ... === | ||
+ | |||
+ | Eclipse verwaltet die einzelnen Projekt in einem sogenannten workspace. Ein workspace ist ein Basisverzeichnis in dem die im workspace enthaltenen Verzeichnisse als Unterverzeichnisse angelegt werden. Da eclipse nur eine einstufige Projektstruktur verwaltet, muss zur Entwicklung von Plugins als workspace das Verzeichnis $SOURCEDIR/PLUGINS/src ausgewählt werden. | ||
+ | |||
+ | Bevor wir jetzt ein neues Projekt mit eclipse anlegen, lassen wir zunächst ein Template mit dem Skript <code>newplugin</code> anlegen. Danach können wir in eclipse ein neues Projekt anlegen. Dazu unter "File/New" den Projekttyp "Standard Make C++ Project" auswählen und im folgenden Dialog als Project Name den Namen des Plugins angeben. Eclipse wird daraufhin das zuvor angelegte Template als neues Projekt erkennen und alle vorhandenen Dateien in die Projektverwaltung übernehmen. Da wir kein Managed C++ Projekt ausgewählt haben, wird eclipse das im Template enthaltene Makefile zum Übersetzen heranziehen und damit alle für das Plugin relevanten Einstellungen aus dem Makefile anwenden. Ab hier kann man jetzt wie gewohnt weiter arbeiten. | ||
==Start Skript== | ==Start Skript== | ||
Da man sein zu entwicklendes Plugin auch immer testen will, bietet es sich an dieses per Tastendruck aus KDevelop zu machen. Dazu baut man sich ein Skript das ein "make clean && make all" im Pluginverzeichniss aufruft. | Da man sein zu entwicklendes Plugin auch immer testen will, bietet es sich an dieses per Tastendruck aus KDevelop zu machen. Dazu baut man sich ein Skript das ein "make clean && make all" im Pluginverzeichniss aufruft. | ||
− | Somit wird das Plugin übersetzt und in das lib | + | Somit wird das Plugin übersetzt und in das lib Verzeichnis kopiert. Alternativ kann man auch "make plugins" aus dem VDR Verzeichniss aufrufen. Dauert aber unnötig länger. |
Nun soll das Skript vdr mit allen Parametern starten. | Nun soll das Skript vdr mit allen Parametern starten. | ||
Zeile 65: | Zeile 92: | ||
#!/bin/bash | #!/bin/bash | ||
− | #Auf wunsch | + | |
− | rm ../../lib/libvdr- | + | #Auf wunsch altes Plugin löschen um Probleme zu vermeiden |
+ | rm ../../lib/libvdr-myplugin.so.1.3.34 | ||
+ | |||
make clean | make clean | ||
make all | make all | ||
+ | |||
#testen ob make erfolgreich war | #testen ob make erfolgreich war | ||
if test "${?}" != 0 | if test "${?}" != 0 | ||
Zeile 74: | Zeile 104: | ||
exit; | exit; | ||
fi | fi | ||
+ | |||
cd /path/to/VDR | cd /path/to/VDR | ||
xterm -geometry 150 -e "tail -f /var/log/syslog" & | xterm -geometry 150 -e "tail -f /var/log/syslog" & | ||
Zeile 83: | Zeile 114: | ||
Wenn ich nun in KDevelop auf den Startknopf drücke, wird das Plugin übersetzt und mit vdr gestartet. | Wenn ich nun in KDevelop auf den Startknopf drücke, wird das Plugin übersetzt und mit vdr gestartet. | ||
− | ==Benutzen des | + | ==Benutzen des Debuggers== |
− | + | Die Verwendung des [[Gdb|gdb]]-Debugger wird ist in einen separaten [[Gdb|Kapitel]] behandelt. | |
==Zu beachten== | ==Zu beachten== | ||
− | Es ist zu beachten | + | Es ist zu beachten, dass Plugins, die in der Entwicklungsumgebung entwickelt werden, nicht immer auf anhieb auf einem echten VDR laufen. Oft ist es das Problem, dass das xine-Plugin keine Begrenzung für das OSD hat. Somit kann man damit recht viel machen. |
+ | Es ist auch zu beachten, dass beim Entwickeln mit dem xine Plugin die Anzahl der Devices um eins erhöht ist. Das vom Xine-Plugin zugefügte Device(PrimaryDevice) dient jedoch nur zur Ausgabe und bietet nicht die Funktion über dieses Device etwas aufzunehmen. Dieses sollte man im Hinterkopft behalten wenn man versucht einen cReceiver oder cFiler zu schreiben. | ||
==Links== | ==Links== | ||
− | + | # [http://kdevelop.org KDevelop Project] | |
− | + | # [http://www.eclipse.org Eclipse Project] | |
− | + | # [http://anjuta.org Anjuta Project] | |
− | + | ||
− | + | ||
+ | [[Kategorie:Entwicklung]] |
Aktuelle Version vom 11. Oktober 2009, 16:56 Uhr
Hier ist noch stark Baustelle. Wer Lust hat darf gerne was schreiben!!
[Bearbeiten] Motivation
Jeder der sich vornimmt ein paar Zeilen Code für VDR zu programmieren - sei es ein Plugin oder ein Patch - kommt früher oder später nicht um eine richtige Entwicklungsumgebung rum. Es ist nämlich viel zu mühsam auf einem Wohnzimmer-VDR zu entwickeln. Hier sollen ein paar Tipps gegeben werden, wie man bequem auf seinem Desktop-PC entwickeln kann.
[Bearbeiten] Grundfunktionen der Entwicklungsumgebung
Es gibt mindestens zwei Eigenschaften die eine VDR-Entwicklungsumgebung bieten sollte.
- Bequemes programmieren
- Code im VDR testen
Diese Anleitung soll zeigen wie man eine Entwicklungsumgebung mit KDevelop, VDR und dem Xine-Plugin aufbauen kann.
[Bearbeiten] Einrichten von VDR
Beim Einrichten von VDR ist nicht viel zu beachten. Nur ist es beim Verwenden vom Xine-Plugin nicht nötig die DVB-Treiber zu installieren, da das xine-plugin als Device erkannt wird. Trotzdem müssen die Header der Treiber an der richtigen Stelle liegen.(wie in der Beschreibung zum Treiber beschrieben) Bitte folge dieser Anleitung: VDR Installation
[Bearbeiten] Einrichten von Xine-Plugin
Das Einrichten des Xine-Plugins wurde hier genauer beschrieben: Xine-plugin
[Bearbeiten] Einrichten von Xine-Player
Neben dem Xine-Plugin muss auch noch der Xine Player richtig installiert werden:Xine-plugin
Alternativ kann man hier auch sehr schön den XineVDR Player verwenden.
[Bearbeiten] Integrierte Entwicklungsumgebung einrichten
Wer ein wenig mehr Komfort bei der Bearbeitung seiner Quelltexte wünscht, wird eine integrierte Entwicklungsumgebung einrichten wollen. Vorteile einer integrierten Entwicklungsumgebung sind je nach Ausstattung:
- Syntax Higlighting, Auto Completion
- Class Browsing, C/C++ Parsing während der Eingabe, Automatisches Build nach dem Speichern
- Auto Indentation, Auto Format
- etc, etc
Neben kommerziellen Produkten, existieren im Linux Umfeld einige frei verfügbare Entwicklungsumgebungen. Dazu gehören z.B. KDevelop, eclipse mit CDT und Anjuta.
[Bearbeiten] KDevelop einrichten
Fast alle Distributionen liefern KDevelop mit aus. Daher wird die Installation hier nicht weiter beschieben.
Einen wichtigen Punkt möchte ich hier jedoch kurz beschreiben. Erfahrene Programmierer kennen es natürlich. Unter Projekt->Projekt-Optionen->C++ Besonderheiten->Codekomplementierung, können wir den VDR Code zufügen.
Wenn sie dann also cDevice:: + strg + Space eingeben, dann werden ihnen alle Möglichkeiten der Codekomplementierung angezeigt. Das selbe gilt für Methoden von Objekten oder Elementen von Datenstrukturen.
[Bearbeiten] Eclipse einrichten
Eclipse ist eine plattformübergreifende Entwicklungsumgebung auf Basis von java. Als Voraussetzung benötigt man also ein JRE (java runtime environment) oder SDK (java development kit). Bei den meisten Distribution ist das bereits enthalten. Auch eclipse ist in den meisten Fällen schon Bestandteil der Distribution. Eine manuelle Installation ist aber denkbar einfach. Dazu von [1] zunächst das Platform SDK für Linux als tgz herunterladen und im Dateisystem entpacken. Als Beispiel wählen wir das Verzeichnis /usr/share/eclipse
. Wer möchte kann noch einen Link von /usr/share/eclipse/eclipse
auf /usr/bin/eclipse
anlegen. Danach die C/C++ Development Tools (CDT) herunterladen und in das gleiche Verzeichnis wie eclipse entpacken. Das war alles.
[Bearbeiten] Neues Plugin erstellen
Das Erstellen eines neuen Plugins ist unter VDR recht einfach. In dem Verzeichniss von VDR gibt es ein Skript mit dem Namen "newplugin". Dieses läßt sich recht einfach mit
- newplugin <name>
aufrufen. Das Skript erstellt im Verzeichniss VDR/PLUGINS/src/ ein neues Plugin. Dieses Plugin gilt es nun mit Leben zu füllen.
[Bearbeiten] Plugin mit der integrierten Entwicklungsumgebung programmieren
[Bearbeiten] Mit KDevelop ...
Um jedoch nun das Plugin unter KDevelop programmieren zu können, müssen wir erstmal aus dem Makefile ein KDevelop Projekt erstellen. Dieses kann man unter
- Projekt->Projekt importieren...
In dem Dialog wählt man das Verzeichnis, in dem das neu erstelle Plugin liegt. Der Projektname wird richtig übernommen. Wir müssen nur noch den Projekttyp wählen. Ich habe hier immer "Generic C++ Application (Automake based)" genommen. Im vdr haben alle C Dateien die Endung *.c. Da wir in C++ programmieren und alle von KDevelop erzeugten Dateien die Endung .cpp haben, ändern wir diese auch in *.c
[Bearbeiten] Mit eclipse ...
Eclipse verwaltet die einzelnen Projekt in einem sogenannten workspace. Ein workspace ist ein Basisverzeichnis in dem die im workspace enthaltenen Verzeichnisse als Unterverzeichnisse angelegt werden. Da eclipse nur eine einstufige Projektstruktur verwaltet, muss zur Entwicklung von Plugins als workspace das Verzeichnis $SOURCEDIR/PLUGINS/src ausgewählt werden.
Bevor wir jetzt ein neues Projekt mit eclipse anlegen, lassen wir zunächst ein Template mit dem Skript newplugin
anlegen. Danach können wir in eclipse ein neues Projekt anlegen. Dazu unter "File/New" den Projekttyp "Standard Make C++ Project" auswählen und im folgenden Dialog als Project Name den Namen des Plugins angeben. Eclipse wird daraufhin das zuvor angelegte Template als neues Projekt erkennen und alle vorhandenen Dateien in die Projektverwaltung übernehmen. Da wir kein Managed C++ Projekt ausgewählt haben, wird eclipse das im Template enthaltene Makefile zum Übersetzen heranziehen und damit alle für das Plugin relevanten Einstellungen aus dem Makefile anwenden. Ab hier kann man jetzt wie gewohnt weiter arbeiten.
[Bearbeiten] Start Skript
Da man sein zu entwicklendes Plugin auch immer testen will, bietet es sich an dieses per Tastendruck aus KDevelop zu machen. Dazu baut man sich ein Skript das ein "make clean && make all" im Pluginverzeichniss aufruft. Somit wird das Plugin übersetzt und in das lib Verzeichnis kopiert. Alternativ kann man auch "make plugins" aus dem VDR Verzeichniss aufrufen. Dauert aber unnötig länger.
Nun soll das Skript vdr mit allen Parametern starten. Ich habe die Ausgabe auf ein extra Fenster gelegt:
xterm -e "./vdr --log=3.7 -v /video/ '-Pxine -r' -w 60 -Ptest" &
Zum schluss soll noch der Xine-Player gestartet werden:
xine vdr:/tmp/vdr-xine/stream#demux:mpeg_pes
Noch sehr hilftreich ist es wenn man ein
tail -f /var/log/syslog
mit einfügt. Dadurch kann man alle outputs des Plugins (mit dsyslog("Hallo Welt")) direkt sehen.
Das ganze zusammen sieht dann in etwas so aus.
#!/bin/bash #Auf wunsch altes Plugin löschen um Probleme zu vermeiden rm ../../lib/libvdr-myplugin.so.1.3.34 make clean make all #testen ob make erfolgreich war if test "${?}" != 0 then exit; fi cd /path/to/VDR xterm -geometry 150 -e "tail -f /var/log/syslog" & xterm -e "./vdr --log=3.7 -v /path/to/video/ '-Pxine -r' -w 60 -Pfemon -Pgetdsmcc" & xine vdr:/tmp/vdr-xine/stream#demux:mpeg_pes
Dieses schreibe ich mir in eine Datei z.B. startvdr.sh und lege diese im Plugin Verzeichniss ab. In KDevelop trage ich nun dieses Skript unter Projekt->Projekt-Optionen->Laufzeit-Optionen->Hauptprogramm ein. Wenn ich nun in KDevelop auf den Startknopf drücke, wird das Plugin übersetzt und mit vdr gestartet.
[Bearbeiten] Benutzen des Debuggers
Die Verwendung des gdb-Debugger wird ist in einen separaten Kapitel behandelt.
[Bearbeiten] Zu beachten
Es ist zu beachten, dass Plugins, die in der Entwicklungsumgebung entwickelt werden, nicht immer auf anhieb auf einem echten VDR laufen. Oft ist es das Problem, dass das xine-Plugin keine Begrenzung für das OSD hat. Somit kann man damit recht viel machen. Es ist auch zu beachten, dass beim Entwickeln mit dem xine Plugin die Anzahl der Devices um eins erhöht ist. Das vom Xine-Plugin zugefügte Device(PrimaryDevice) dient jedoch nur zur Ausgabe und bietet nicht die Funktion über dieses Device etwas aufzunehmen. Dieses sollte man im Hinterkopft behalten wenn man versucht einen cReceiver oder cFiler zu schreiben.