Fragen zur tuxbox Programmierung

bellum
bbs-Maintainer
Beiträge: 282
Registriert: Montag 23. Oktober 2006, 22:13

Fragen zur tuxbox Programmierung

Beitrag von bellum »

Nachdem das bauen von Images kein Problem mehr darstellt, möchte ich nun gerne den nächsten Schritt wagen und in die tuxbox Programmierung einsteigen...

Nachdem ich mich schon hier und da eingelesen habe, soll es für den Anfang ein "Hallo Welt" Plugin werden.
Leider muste ich feststellen dass ich vor dem Begin der eigentlichen Programmierung mich intensiv mit der ganzen make Sache beschäftigen musste... :( und ich immer noch nicht den genauen Plan habe.

Ich hoffe ich darf in diesem Thread ein paar doofe Fragen stellen und bitte nicht gleich hauen wenn diese ganz trivial sind...

Und hier schon die erste. Folgende Dateien habe ich erstellt:

testplugin.h

Code: Alles auswählen

#include "stdio.h"
#include "plugin.h" 
testplugin.c

Code: Alles auswählen

#include "testplugin.h"

void plugin_exec(PluginParam *par)
{
	printf("Hallo Welt\n");
	return;
}
Makefile

Code: Alles auswählen

CC 	= /home/bellum/tuxbox/dbox2/cdk/bin/powerpc-tuxbox-linux-gnu-gcc
CC_FLAGS	= -Wall -Wextra -O2 -I/home/bellum/tuxbox/dbox2/cdkroot/include -I/home/bellum/tuxbox/tuxbox-cvs/apps/tuxbox/plugins/include

plugintest: testplugin.c testplugin.h
	$(CC) $(CC_FLAGS) -o testplugin.so testplugin.c 
Gebe ich nun make ein kommt

Code: Alles auswählen

/home/bellum/tuxbox/dbox2/cdk/bin/powerpc-tuxbox-linux-gnu-gcc -Wall -Wextra -O2 -I/home/bellum/tuxbox/dbox2/cdkroot/include -I/home/bellum/tuxbox/tuxbox-cvs/apps/tuxbox/plugins/include -o testplugin.so testplugin.c
testplugin.c:3: warning: unused parameter 'par'
/home/bellum/tuxbox/cvs/dbox2_100320/cdk/bin/../lib/gcc/powerpc-tuxbox-linux-gnu/3.4.6/../../../../powerpc-tuxbox-linux-gnu/lib/nof/crt1.o:(.rodata+0x4): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [plugintest] Error 1
Habe nach dem Fehler auch schon gegoogelt und es scheint er meckert hier die fehlende main Funktion an.
Tatsächlich wenn ich void plugin_exec(PluginParam *par) durch void main() ersetze baut er und das erzeugte Programm funktioniert sogar auf der dbox.

Was muss ich aber tun um ein PlugIn zu erzeugen. Ich schätze da muss was am Makefile gedreht werden aber ich weiß leider nicht was...

Danke schon mal im Voraus für die Hilfe

Gruß bellum
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Fragen zur tuxbox Programmierung

Beitrag von rhabarber1848 »

Schau Dir mal die Makefiles der bestehenden Plugins an, z.B.
http://cvs.tuxbox-cvs.sourceforge.net/t ... iew=markup

Die Plugins werden als .so-Dateien erstellt.
bellum
bbs-Maintainer
Beiträge: 282
Registriert: Montag 23. Oktober 2006, 22:13

Re: Fragen zur tuxbox Programmierung

Beitrag von bellum »

rhabarber1848 hat geschrieben:Schau Dir mal die Makefiles der bestehenden Plugins an, z.B.
http://cvs.tuxbox-cvs.sourceforge.net/t ... iew=markup

Die Plugins werden als .so-Dateien erstellt.
Danke für Deine Antwort, aber die Dateien für Automake verwirren mich leider noch mehr als dass sie helfen.
Wenn ich das richtig verstanden habe sind die Makefile.am Dateien dafür da automatisch Makefiles erstellen zu lassen.
Das zieht mir aber eine zusätzliche Komplexitätsebene ein die ich gerne vermeiden möchte um überhaupt erst mal die make Sache zu verstehen.

Gruß bellum
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Fragen zur tuxbox Programmierung

Beitrag von rhabarber1848 »

bellum
bbs-Maintainer
Beiträge: 282
Registriert: Montag 23. Oktober 2006, 22:13

Re: Fragen zur tuxbox Programmierung

Beitrag von bellum »

rhabarber1848 hat geschrieben:Schau mal hier: http://www.tuxbox-cvs.sourceforge.net/f ... 72#p371172
Danke aber diesen Thread kenne ich schon und ich finde er zeigt sehr schön warum es wahrscheinlich nicht mehr Leute gibt, die tuxbox Programmierung machen.

Da mus man zig Dateien bearbeiten, löschen usw. um überhaupt einmal ein Makefile zu bekommen um das Plugin bauen zu können.

Und wenn man dann mal frisch auscheckt darf man alles gerade noch mal machen. Ich bin ja hart im nehmen aber das ist mir eindeutig zu kompliziert und unkomfortabel.

Aber vielleicht habe ich mir ja mit Plugins ja auch für den Anfang etwas zu schwieriges ausgesucht...

Das muss doch auch einfacher gehen und vor allem einen neuen checkout überleben, oder?

Gruß bellum
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Fragen zur tuxbox Programmierung

Beitrag von MPC823 »

bellum hat geschrieben:Da mus man zig Dateien bearbeiten, löschen usw. um überhaupt einmal ein Makefile zu bekommen um das Plugin bauen zu können.

Und wenn man dann mal frisch auscheckt darf man alles gerade noch mal machen. Ich bin ja hart im nehmen aber das ist mir eindeutig zu kompliziert und unkomfortabel.
Nun mir ist nicht so ganz klar was Du willst oder erwartest. Wenn Dir das schon zu viel ist dann ist das wirklich nicht das richtige den um ein Plugin zu machen mit GUI ist das noch das "Billigste" an dem ganzen.

Und so beträchtlich ist der Aufwand nicht. Wenn man mal ein Plugin gemacht hat muss man nur noch seine Sourcen sichern und zwei dateine bearbeiten ist auch kein Hexenwerk fürs bauen.

Aber mit einer Borland IDE ist es natürlich nicht zu vergleichen

Martin
Barf
Developer
Beiträge: 1475
Registriert: Dienstag 4. Februar 2003, 22:02

Re: Fragen zur tuxbox Programmierung

Beitrag von Barf »

bellum hat geschrieben:Makefile

Code: Alles auswählen

CC 	= /home/bellum/tuxbox/dbox2/cdk/bin/powerpc-tuxbox-linux-gnu-gcc
CC_FLAGS	= -Wall -Wextra -O2 -I/home/bellum/tuxbox/dbox2/cdkroot/include -I/home/bellum/tuxbox/tuxbox-cvs/apps/tuxbox/plugins/include

plugintest: testplugin.c testplugin.h
	$(CC) $(CC_FLAGS) -o testplugin.so testplugin.c 
Wie du selbst gemerkt hast, richtig so einfach ist es nicht. Die Regel, die du in der Makefile geschrieben hast, versucht ein ausführbares Programm (auch wenn *.so genannt) zu bauen. Deswegen wird ein main-funktion notwendig, wie du schon gemerkt hast. Ein plugin ist anstatt ein dynamisches shared object (entspricht dll in Windows), und sowas wird mit ein völlig andere Kommando gebastelt (-fpic u.A.). Auch mit Borland, Visual Studio etc, muss man unterscheinden zwischen ausführbare Programme und shared objecte/dynamische Bibliotheke/dll/so. Anstatt selbst herauszufinden wie man ein so bastelt, kann man die genannte Anleitungen folgen, da sind passende Regeln für shared-objekt-Basteln schon fertig vorhanden.

Ich will nicht sagen, dass alles perfekt ist, oder nicht verbessert werden können. Ich finde es eigentlich recht doof, dass ein Build ausserhalb des cvs-workspace nicht unterstützt ist. Und Autoconfig wird ja -- in dieser Usecase -- mehr und mehr zu einer peinlichen Anachronismus: wir kennen schon z.B die Eigenschaften der Compilers (wir haben es selbst gebaut) etc.
MPC823 hat geschrieben:Aber mit einer Borland IDE ist es natürlich nicht zu vergleichen
Mit gewisse Anstrengung (am Anfang!) wird es mit aller Wahrscheinlichkeit möglich sein, eine IDE wie Eclipse oder Netbeans (beide open-source!) hier einzusetzen.

Weil freie Software kannst du letzendlich das ändern, was dir nicht gefällt. Habe ich getan... ... :wink:
bellum
bbs-Maintainer
Beiträge: 282
Registriert: Montag 23. Oktober 2006, 22:13

Re: Fragen zur tuxbox Programmierung

Beitrag von bellum »

MPC823 hat geschrieben:Aber mit einer Borland IDE ist es natürlich nicht zu vergleichen
Ich habe noch nie noch will ich eine (Borland) IDE benutzen. Um genau zu sein ist es schon ziemlich lange her, dass programmiert habe (und da hat mir jemand anders das Makefile erstellt :oops: ).

Eigentlich will ich letztendlich auch gar kein Plugin erstellen. Das war nur eine Übung von der ich ausging, dass es unkompliziert wäre und einfach in mein bestehendes Image einzubinden ist.

Ich will jetzt auch gar nicht weiter darauf rumreiten und war vielleicht gestern auch einfach etwas gefrustet, weil es einfach nicht weiterging...

Jedenfalls hat mich letztendlich rhabarbers Satz auf die richtige Spur gebracht. :D
rhabarber1848 hat geschrieben:Die Plugins werden als .so-Dateien erstellt.
Google war dann mein Freund und mit dem nachfolgenden makefile funktioniert jetzt alles so wie ich will.

Code: Alles auswählen

# Variables, use with $(VARIABLENAME)
CC		= /home/bellum/tuxbox/dbox2/cdk/bin/powerpc-tuxbox-linux-gnu-gcc
CFLAGS	= -Wall -Wextra -O2 -I/home/bellum/tuxbox/dbox2/cdkroot/include -I/home/bellum/tuxbox/tuxbox-cvs/apps/tuxbox/plugins/include -c

plugintest: testplugin.c testplugin.h
	$(CC) $(CFLAGS) -o testplugin.o testplugin.c
	$(CC) -shared -o testplugin.so testplugin.o
	/home/bellum/tuxbox/dbox2/cdk/bin/powerpc-tuxbox-linux-gnu-strip testplugin.so

.PHONY: clean
clean:
	rm *.o
	rm *.so
@Barf, ist das Makefile so O.K.? Das mit "-fpic" ist mir auch schon über den Weg gelaufen, aber für plugins braucht man das anscheinend nicht wirklich, oder?

Gruß bellum