Pandora Developer Guide


JohnDavidson

Well-Known Member
Staff member
Joined
Aug 17, 2005
Messages
1,020
Age
36
Location
Mettmann
Website
www.masterlinux.de
ICQ
347384376
WEBSITE
http://www.masterlinux.de
LOCATION
Mettmann
So ich habs endlich geschafft ne Executable für die Pandora unter Ubuntu zu erzeugen. Es war echt nicht leicht, aber ich wollte hier kurz eine kleine Anleitung veröffentlichen. Und ich würde mich freuen, wenn aktuelle Pandora Besitzer diese mal testen könnten. Das hat folgenden Grund. Ich möchte mit Qt für Linux und Windows ein Programm für das kompilieren und erstellen der pxml und der pnd erstellen. Und dafür wollte ich meinen Weg nochmal testen lassen ;) Als Beispiel nehme ich hier mal ein SDL-Programm das mit C++ geschrieben wurde. Welches sich im Anhang befindet. Das ist mein Anfang einer kleinen SDL-Engine ;)

Vorbereitungen:
1. Crosscompiler installieren

1.1. Als Crosscompiler nutze ich den Lite-Compiler von CodeSourcery der unter folgender Adresse zu bekommen ist. Hier den IA32 GNU/Linux Installer herunterladen.

Sourcery G++ Lite 2009q3-67 for ARM GNU/Linux
http://www.codesourcery.com/sgpp/lite/arm/portal/release1039

1.2. Als nächstes muss dieser Compiler noch installiert werden. Da Ubuntu Dash als Shell nutzt, der Installer von CodeSourcery aber nicht damit klar kommt, muss zuerst Dash als Standard-SHell abgelöst werden. Das erreicht man, indem man im Terminal den nachfolgenden Befehl eingibt.
Code:
sudo dpkg-reconfigure -plow dash

Man gibt das aufgeforderte Admin-Passwort ein und wählt in dem angezeigten Shell-Dialog "Nein" aus.

1.3. Danach geht man in das Verzeichnis, in dem die heruntergeladene Bin liegt, und startet den grafischen Installations-Dialog. Und folgt den Anweisungen. Es brauch nichts besonders eingestellt werden. Einfach immer schön weiter klicken ;)
Code:
./arm-2009q3-67-arm-none-linux-gnueabi.bin

1.4. Jetzt setzt man nur noch den System-Pfad mit folgendem Befehlen. (P.S. Frage an de Experten ;) Kann man den Pfad so anlegen, dass er nach dem Neustart des Systems erhalten bleibt?)
Code:
PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATH
export PATH

1.5. Jetzt sollte der einfache Aufruf von "arm-none-linux-gnueabi-g++" in der Konsole klappen.


2. Libraries und Includes für ARM-Angstrom

2.1.1 Jetzt benötigt man für den Crosscompiler noch die richtigen Libs. Die unter Angstrom auf einem ARM-System kompiliert wurden, bzw. mit einem Crosscompiler. Das ist die Grundvoraussetzung, damit das Compilieren funktioniert. Diese Libs bekommt man unter

http://www.angstrom-distribution.org/unstable/feed/armv7a/base/

2.1.2 Alternativ kann man sich wohl auch alle Libs, etc von der Pandora selbst holen, aber überspringen wir diesen Schritt einfach ;)

2.2. Auf dieser Seite suchen wir dann die Libs für SDL, SDL_image und für stdc++. Hierbei wird die Dev und die normale Version benötigt.

Folgende *.ipk Dateien herunterladen.
- libstdc++-dev_4.3.3-r14.1.5_armv7a.ipk
- libstdc++6_4.3.3-r14.1.5_armv7a.ipk
- libsdl-1.2-0_1.2.14-r4.5_armv7a.ipk
- libsdl-1.2-dev_1.2.14-r4.5_armv7a.ipk
- libsdl-image-1.2-0_1.2.10-r5.1.5_armv7a.ipk
- libsdl-image-1.2-dev_1.2.10-r5.1.5_armv7a.ipk

2.3. Nach dem Download öffnet man die Dateien mit dem Archivmanager (per GUI). Rechtsklick auf die Datei und auf "Mit Archivmanager öffnen" klicken.

Hier navigiert man dann folgendermaßen.
-> data.tar.gz
Öffnet ein neues Archivmanager-Fenster

-> .
Ja der Ordner heißt echt nur "." Darauf doppelt klicken.

Hier befindet sich de Ordner usr, den wir benötigen. Diesen entpacken wir zB in den Projekt-Ordner in dem sich unser SDL-Spiel befindet.


3. Compiler ausführen

3.1. Der wohl einfachste Schritt ;) Aber auch nur weil ich den Compiler schon etwas durch meine Arbeit mit dem Palm Pre kenne. Ich möchte den Schritt mal ein wenig genauer erläutern.

Eine kleine Vorschau über die Optionen des Compilers:
arm-none-linux-gnueabi-g++ DEVICEOPS -o OUTPUT SRC INCLUDEPATH LIBPATH -Wl,--allow-shlib-undefined USEDLIBS

arm-none-linux-gnueabi-g++
Das ist einfach der Aufruf des Compilers.

DEVICEOPS
Hier gibt man dem Compiler ein paar Infos über das Gerät, wofür das Executable erstellt werden soll.
In unserem Fall wäre das "-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp". Wie man sieht wird hier der Prozessor die FPU und allgemein die Handhabung mit Floatingpoints definiert. Genaueres steht in der Doku vom Compiler.

OUTPUT
Hierbei handelt es sich einfach nur um den Namen der Datei (Executable) die erzeugt werden soll. Als Beispiel nehmen wir hier "sdlgameengine"

SRC
An der Stelle von SRC werden alle *.cpp Dateien aufgelistet die für das Programm benötigt werden. Die Header-Dateien werden durch die *.cpp Dateien automatisch hinzugefügt. Also fügen wir hier "Window.cpp Image.cpp AnimatedImage.cpp Engine.cpp Controls.cpp main.cpp" ein.

INCLUDEPATH & LIBPATH
Damit der Compiler weiß wo sich die ganzen Libraries befinden gibt man an dieser Stelle die Ordner an die alle nötigen Dateien enthalten. Libraries gibt man mit dem Befehl -L an und Includes mit dem -I Befehl (großes i). Nach unserem Beispiel fügen wir hier "-Iusr/include/SDL -Lusr/lib" ein.

USEDLIBS
Zum Schluss fügt man nur noch die benötigten Libs an. Hier wäre "-lSDL -lSDL_image -lstdc++" die richtige Lösung. -lstdc++ fügt dabei libstdc++ an. Auch wenn der g++ Compiler schon die stdc++ automatisch einfügt, müssen wir hier anscheinend die eigene Lib nehmen, da sich sonst di Executable nicht auf der Pandora ausführen lässt. Standardmäßig wird wohl eine falsche Version eingebunden, daher dieser Schritt. Es kann sein dass di Reihenfolge der Libs wichtig ist. Also dass -lSDL vor -lSDL_image definiert werden muss.

3.2. Befehl anhand der oben genannten Infos erstellen. Dieser Befehl sieht dann folgendermaßen aus.
Code:
arm-none-linux-gnueabi-g++ -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -o sdlgameengine Window.cpp Image.cpp AnimatedImage.cpp Engine.cpp Controls.cpp main.cpp -Iusr/include/SDL -Lusr/lib -Wl,--allow-shlib-undefined -lSDL -lSDL_image -lstdc++

3.3 Befehl ausführen
Hier werden meistens Warnungen ausgegeben, die man soweit ignorieren kann. Meistens benötigt eine eingebundene Lib eine weitere Lib. Zum kompilieren sind diese Libs aber nicht notwendig. Der Befehl wird hier im Ordner ausgeführt, in dem sich die ganzen *.cpp Dateien und das usr/ Verzeichnis mit den Libs, etc aus den *.ipk Dateien befinden.

4. Executable und Ordner auf die Pandora kopieren

4.1. Jetzt sollte es im Verzeichnis in den man sich befindet eine ausführbare Datei names "sdlgameengine" befinden. Diese Datei und der Content-Ordner werden jetzt auf die Pandora kopiert. Zum Beispiel ins Root der SD-Karte.

4.2. Als letztes kann man das Programm ausführen, indem man auf der Pandora einfach per Terminal in den Ordner von der Datei sdlgameengine navigiert. Und dort nachfolgendes eingibt.
Code:
./sdlgameengine


So ich hoffe ich hab nichts falsch erläutert oder vergessen. Wenn es Probleme gibt, dann schreibt einfach und ich versuche euch zu helfen. Den PXML und PND Krahm erkläre ich erstmal nicht. Im Endeffekt sind herfür im englischen pandorawiki, zwei ganze Skripts vorhanden, die man dafür nutzen kann. Doch das kompilieren wurde nicht erläutert.

Außerdem möchte ich für den ganzen Prozess eh eine GUI schreiben. Wenn es von eurer Seite aus noch Verbesserungsvorschläge gibt, dann her damit ;)
 

Attachments

  • SDLGameEngine.tar.gz
    9.1 KB · Views: 384
Sehr schön und ausführlich erklärt. Werde ich mir vielleicht auch so einrichten.
Aber ich würde am liebsten später einfach auf der Pandora kompilieren, da ja schon Code::Blocks portiert wurde und das meine bevorzugte IDE ist. :-D

Mal so halb Offtopic: Muss man wenn man SDL benutzt und auf der Pandora kompiliert irgendwelche Libs installieren?
 
elvissteinjr said:
Sehr schön und ausführlich erklärt. Werde ich mir vielleicht auch so einrichten.
Aber ich würde am liebsten später einfach auf der Pandora kompilieren, da ja schon Code::Blocks portiert wurde und das meine bevorzugte IDE ist. :-D

Mal so halb Offtopic: Muss man wenn man SDL benutzt und auf der Pandora kompiliert irgendwelche Libs installieren?

Die Pandora hat nur leider wenig Ressourcen um größere Projekte zu kompilieren, deswegen bevorzuge ich immer meinen Rechner ;)
SDL ist schon auf der Pandora vorhanden.
SDL, SDL_image, SDL_gfx, SDL_mixer und für Netzwerk ist da glaub ich auch was. Kann auch sein, dass ich was vergessen habe. Also du brauchst nichts mehr auf der Pandora installieren.
 
JohnDavidson said:
Kann man den Pfad so anlegen, dass er nach dem Neustart des Systems erhalten bleibt?
Ich würde es in einem Debian System wenn es für alle User gelten soll in /etc/rc.local ablegen.
Ubuntu ist zwar Debian-basiert, allerdings weiss ich nicht ob die Startscripte vollständig übernommen sind, aber vielleicht gibt Dir das einen Hinweis. Und danke für die Zusammenfassung!
 
Back
Top