Mini2440 SDL GUI Programmierung
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:
Die Vorraussetzungen hierfür sind:
- Die FriendlyARM Toolchain
- Funktionierender Framebuffer mit Framebuffer Konsole
- Ein wenig Zeit
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!
libsdl
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.
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 ***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 sudo time make install
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
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.
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