Mini2440 SDL GUI Programmierung: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 13: Zeile 13:


= Einrichten der Cross-Toolchain =
= Einrichten der Cross-Toolchain =
Ich gehe davon aus, dass man alle kommenden Schritte als "normaler" User erledigt. Sämtliche Schritte, die als "root" erledigt werden müssen,<br> wird ein "sudo" vorangestellt. Wenn das bei dir anders gehen sollte (z.B. su -c '...'), dann ändere es für dich!
Ich gehe davon aus, dass man alle kommenden Schritte als "normaler" User erledigt. Sämtliche Schritte, die als "root" erledigt werden müssen, wird ein "sudo" vorangestellt. Wenn das bei dir anders gehen sollte (z.B. su -c '...'), dann ändere es für dich!


== Vorarbeit ==
== Vorarbeit ==
Damit es funktioniert muss die [http://www.mikrocontroller.net/articles/Mini2440#FriendlyARM friendlyARM Toolchain] installiert sein und folgendes in der Konsole erledigt werden.
Damit es funktioniert muss die [http://www.mikrocontroller.net/articles/Mini2440#FriendlyARM friendlyARM Toolchain] installiert sein und folgendes in der Konsole erledigt werden.
<pre>
<pre>
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.la /usr/local/arm/4.3.2/lib/libts.la
sudo cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.la /usr/local/arm/4.3.2/lib/libts.la
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.so /usr/local/arm/4.3.2/lib/libts.so
sudo cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.so /usr/local/arm/4.3.2/lib/libts.so
</pre>
</pre>


Zeile 28: Zeile 28:


== libsdl ==
== libsdl ==
=== Bibliothek kompilieren ===
Die Bibliothek libSDL wird folgendermaßen kompiliert:<br>
(Beim kopieren die "\" entfernen und alles in eine Zeile.)
<pre>
<pre>
cd ~
cd ~
Zeile 43: Zeile 46:
Nun lassen sich schon die ersten Programme mittels SDL compilieren. Allerdings fehlen noch zusätzliche libs, wie z.B. [http://www.ferzkopp.net/joomla/content/view/19/14/ sdl_gfx] und [http://www.libsdl.org/projects/SDL_image/ sdl_image] <br>um Grafiken, Texte und Bilder anzeigen zu können. SDL alleine steht da ein wenig auf dem Schlauch.
Nun lassen sich schon die ersten Programme mittels SDL compilieren. Allerdings fehlen noch zusätzliche libs, wie z.B. [http://www.ferzkopp.net/joomla/content/view/19/14/ sdl_gfx] und [http://www.libsdl.org/projects/SDL_image/ sdl_image] <br>um Grafiken, Texte und Bilder anzeigen zu können. SDL alleine steht da ein wenig auf dem Schlauch.


Einen Haken hat die Sache noch. Dadurch, dass SDL in seinem Audio-Code auch Assembler verwendet habe ich es noch nicht hinbekommen,<br> SDL mit ALSA oder OSS Support zu compilieren.
Einen Haken hat die Sache noch. Dadurch, dass SDL in seinem Audio-Code auch Assembler verwendet habe ich es noch nicht hinbekommen, SDL mit ALSA oder OSS Support zu compilieren.
Wer dazu einen Tip hat, immer her damit :)
Wer dazu einen Tip hat, immer her damit :)


== libsdl_image ==
== libsdl_image ==
Mit dieser lib lassen sich recht einfach Bilder laden und anzeigen.
Mit dieser lib lassen sich recht einfach Bilder laden und anzeigen. <br>
(Beim kopieren die "\" entfernen und alles in eine Zeile.)
<pre>
<pre>
cd ~
cd ~
Zeile 56: Zeile 60:
--prefix=/usr/local/arm/4.3.2/ \  
--prefix=/usr/local/arm/4.3.2/ \  
--enable-gif --enable-jpg --enable-bmp
--enable-gif --enable-jpg --enable-bmp
***HACK*** (siehe Text unter diesem Kasten)
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.la /usr/local/lib/libts.la
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.so /usr/local/lib/libts.so
***/HACK***
time make
time make
sudo time make install
sudo time make install
</pre>
</pre>
Anmerkungen zum "Hack". Beim compilieren spuckt mir SDL_image einen Fehler aus. Es sagt mir, dass er in /usr/local/lib/ die tslib nicht finden kann. Dort hat er aber nichts zu suchen, da dies kein Pfad zum Cross-Compiling ist. Wie ich das abstelle, habe ich noch nicht herausgefunden, also habe ich einfach einen symbolischen Link angelegt.


== libsdl_gfx ==
== libsdl_gfx ==
Diese lib stellt einen Haufen Grafikfuntkionen bereit, wie Polygone, Rechtecke, Kreise, Linien, ...
Diese lib stellt einen Haufen Grafikfuntkionen bereit, wie Polygone, Rechtecke, Kreise, Linien, ...
Ausserdem beinhaltet sie eine Textausgabe und Funktionen um Surfaces zu rotieren und zu zoomen.
Ausserdem beinhaltet sie eine Textausgabe und Funktionen um Surfaces zu rotieren und zu zoomen. <br>
(Beim kopieren die "\" entfernen und alles in eine Zeile.)
<pre>
<pre>
cd ~
cd ~
Zeile 78: Zeile 78:
sudo make install
sudo make install
</pre>
</pre>
== Testprogramme ==
Die kompilierten Programme können nur auf dem Mini ausgeführt werden, wenn auch die vorher erstellten Bibliotheken dem Kernel bekannt sind. Die Bibliotheken aus diesem Artikel wären dann folgende:
* libts-0.0.so.0.1.1
* libSDL-1.2.so.0.11.3
* libSDL_image-1.2.so.0.8.2
* libSDL_gfx.so.13.5.2
Weil dies aber nicht der Standardname ist unter dem die Bibliothek angesprochen ist, muss noch ein Link auf diese Datei mit dem richtigen Dateinamen erstellt werden. Dazu kopiert man zu erst die bis jetzt erstellten Bibliotheken in den Ordner "/lib" des Minis und tippt in der Konsole des Minis folgendes ein:
<pre>
cd /lib
ln -s libts-0.0.so.0.1.1 libts-0.0.so.0
ln -s libSDL-1.2.so.0.11.3 libSDL-1.2.so.0
ln -s libSDL_image-1.2.so.0.8.2 libSDL_image-1.2.so.0
ln -s libSDL_gfx.so.13.5.2 libSDL_gfx.so.13
</pre>
Bevor die Programme auf dem Mini ausgeführt werden können, müssen diese ebenso übertragen werden.
=== SDL-1.2.14 Demoprogramme ===
Im vorhandenen Ordner "SDL-1.2.14" ist der Ordner "test" zu finden. In diesem sind ein paar Demoprogramme welche folgendermaßen kompiliert werden.
<pre>
cd "Pfad zu dem Ordner"/SDL-1.2.14/test/
CROSS_COMPILE=arm-linux- ./configure --host=arm-linux
make
</pre>
=== SDL_gfx-2.0.21 Demoprogramme ===
Im vorhandenen Ordner "SDL_gfx-2.0.21" ist der Ordner "Test" zu finden. In diesem sind ein paar Demoprogramme welche folgendermaßen kompiliert werden.
<pre>
cd "Pfad zu dem Ordner"/SDL_gfx-2.0.21/Test/
CROSS_COMPILE=arm-linux- ./configure --host=arm-linux
make
</pre>
<span style="color:red">'''Hinweis:'''</span> Ich weiß nicht warum, aber das SDL-Skript includiert den Ordner "/usr/local/arm/4.3.2/include/SDL" und nicht "/usr/local/arm/4.3.2/include". Bei den Demoprogrammen bei der normalen SDL-Bibliothek war dies anscheinend OK. Bei diesem hier steht aber in jeder c-Datei "SDL/xxx.h" und deshalb findet er die Dateien nicht und bricht das Programmerstellen ab. Es gibt nun 2 Möglichkeiten dies zu umgehen.
* /usr/local/arm/4.3.2/bin/sdl-config Zeile 45 editieren und das /SDL löschen oder
* in jeder c-Datei das "SDL/" löschen.
=== Programm ausführen ===
Am besten den ganzen Ordner in das Dateisystem des Minis kopieren.<br>
Ausgeführt werden können die Programme auf dem Mini mit:
<pre>
./Programmname
</pre>


[[Kategorie:Projekte]]
[[Kategorie:Projekte]]

Version vom 8. Mai 2011, 14:20 Uhr

Wer ein kleines Linuxboard mit Display hat, möchte sicher nicht nur die Kernelausgaben auf der Framebuffer-Konsole ansehen oder sich für die
popligsten Anwendungen einen X-Server+Window Manager installieren, sich eine Anwendung schreiben und dann erst loslegen können.

Viel einfacher geht es in einigen Fällen mit SDL. Dieser Artikel beschreibt die Einrichtung einer Cross-Toolchain mit SDL-Support für
das Mini2440. Die unterschiede von Board zu Board sind meist sehr gering, was die Display-Ausgabe angeht. Daher lässt sich dieser Artikel
auch für einige andere Boards verwenden.

Hier ein Screenshot von einem meiner SDL-Programme:
Mini2440 sdl menu screenshot.png

Die Vorraussetzungen hierfür sind:

Einrichten der Cross-Toolchain

Ich gehe davon aus, dass man alle kommenden Schritte als "normaler" User erledigt. Sämtliche Schritte, die als "root" erledigt werden müssen, wird ein "sudo" vorangestellt. Wenn das bei dir anders gehen sollte (z.B. su -c '...'), dann ändere es für dich!

Vorarbeit

Damit es funktioniert muss die friendlyARM Toolchain installiert sein und folgendes in der Konsole erledigt werden.

sudo cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.la /usr/local/arm/4.3.2/lib/libts.la
sudo cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.so /usr/local/arm/4.3.2/lib/libts.so

In der Datei "/usr/local/arm/4.3.2/lib/libts.la" die Zeile 35 als Adminstrator editieren (z.B. in der Konsole mit "sudo gedit /usr/local/arm/4.3.2/lib/libts.la").

libdir='/usr/local/lib'

ändern zu

libdir='/usr/local/arm/4.3.2/lib'

libsdl

Bibliothek kompilieren

Die Bibliothek libSDL wird folgendermaßen kompiliert:
(Beim kopieren die "\" entfernen und alles in eine Zeile.)

cd ~
wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz
tar xvfz SDL-1.2.14.tar.gz
cd SDL-1.2.14
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux \ 
--prefix=/usr/local/arm/4.3.2/ \ 
--enable-input-tslib --enable-video-fbcon --disable-audio --disable-video-x11 --disable-video-directfb
time make
sudo time make install

Diese Schritte dauerten bei mir ca 5 Minuten.

Nun lassen sich schon die ersten Programme mittels SDL compilieren. Allerdings fehlen noch zusätzliche libs, wie z.B. sdl_gfx und sdl_image
um Grafiken, Texte und Bilder anzeigen zu können. SDL alleine steht da ein wenig auf dem Schlauch.

Einen Haken hat die Sache noch. Dadurch, dass SDL in seinem Audio-Code auch Assembler verwendet habe ich es noch nicht hinbekommen, SDL mit ALSA oder OSS Support zu compilieren. Wer dazu einen Tip hat, immer her damit :)

libsdl_image

Mit dieser lib lassen sich recht einfach Bilder laden und anzeigen.
(Beim kopieren die "\" entfernen und alles in eine Zeile.)

cd ~
wget http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz
tar xvfz SDL_image-1.2.10.tar.gz
cd SDL_image-1.2.10
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux \
--prefix=/usr/local/arm/4.3.2/ \ 
--enable-gif --enable-jpg --enable-bmp
time make
sudo time make install

libsdl_gfx

Diese lib stellt einen Haufen Grafikfuntkionen bereit, wie Polygone, Rechtecke, Kreise, Linien, ... Ausserdem beinhaltet sie eine Textausgabe und Funktionen um Surfaces zu rotieren und zu zoomen.
(Beim kopieren die "\" entfernen und alles in eine Zeile.)

cd ~
wget http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.21.tar.gz
tar xvfz SDL_gfx-2.0.21.tar.gz
cd SDL_gfx-2.0.21
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux \
--prefix=/usr/local/arm/4.3.2/ --disable-mmx
time make
sudo make install

Testprogramme

Die kompilierten Programme können nur auf dem Mini ausgeführt werden, wenn auch die vorher erstellten Bibliotheken dem Kernel bekannt sind. Die Bibliotheken aus diesem Artikel wären dann folgende:

  • libts-0.0.so.0.1.1
  • libSDL-1.2.so.0.11.3
  • libSDL_image-1.2.so.0.8.2
  • libSDL_gfx.so.13.5.2

Weil dies aber nicht der Standardname ist unter dem die Bibliothek angesprochen ist, muss noch ein Link auf diese Datei mit dem richtigen Dateinamen erstellt werden. Dazu kopiert man zu erst die bis jetzt erstellten Bibliotheken in den Ordner "/lib" des Minis und tippt in der Konsole des Minis folgendes ein:

cd /lib
ln -s libts-0.0.so.0.1.1 libts-0.0.so.0
ln -s libSDL-1.2.so.0.11.3 libSDL-1.2.so.0
ln -s libSDL_image-1.2.so.0.8.2 libSDL_image-1.2.so.0
ln -s libSDL_gfx.so.13.5.2 libSDL_gfx.so.13

Bevor die Programme auf dem Mini ausgeführt werden können, müssen diese ebenso übertragen werden.

SDL-1.2.14 Demoprogramme

Im vorhandenen Ordner "SDL-1.2.14" ist der Ordner "test" zu finden. In diesem sind ein paar Demoprogramme welche folgendermaßen kompiliert werden.

cd "Pfad zu dem Ordner"/SDL-1.2.14/test/
CROSS_COMPILE=arm-linux- ./configure --host=arm-linux
make

SDL_gfx-2.0.21 Demoprogramme

Im vorhandenen Ordner "SDL_gfx-2.0.21" ist der Ordner "Test" zu finden. In diesem sind ein paar Demoprogramme welche folgendermaßen kompiliert werden.

cd "Pfad zu dem Ordner"/SDL_gfx-2.0.21/Test/
CROSS_COMPILE=arm-linux- ./configure --host=arm-linux
make

Hinweis: Ich weiß nicht warum, aber das SDL-Skript includiert den Ordner "/usr/local/arm/4.3.2/include/SDL" und nicht "/usr/local/arm/4.3.2/include". Bei den Demoprogrammen bei der normalen SDL-Bibliothek war dies anscheinend OK. Bei diesem hier steht aber in jeder c-Datei "SDL/xxx.h" und deshalb findet er die Dateien nicht und bricht das Programmerstellen ab. Es gibt nun 2 Möglichkeiten dies zu umgehen.

  • /usr/local/arm/4.3.2/bin/sdl-config Zeile 45 editieren und das /SDL löschen oder
  • in jeder c-Datei das "SDL/" löschen.


Programm ausführen

Am besten den ganzen Ordner in das Dateisystem des Minis kopieren.
Ausgeführt werden können die Programme auf dem Mini mit:

./Programmname