|
|
Mini2440 SDL GUI ProgrammierungWer ein kleines Linuxboard mit Display hat, möchte sicher nicht nur die Kernelausgaben auf der Framebuffer-Konsole ansehen oder sich für die Viel einfacher geht es in einigen Fällen mit SDL. Dieser Artikel beschreibt die Einrichtung einer Cross-Toolchain mit SDL-Support für Hier ein Screenshot von einem meiner SDL-Programme: Die Vorraussetzungen hierfür sind:
[Bearbeiten] Einrichten der Cross-ToolchainIch 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! [Bearbeiten] VorarbeitDamit 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' [Bearbeiten] libsdlDie Bibliothek libSDL wird folgendermaßen kompiliert: 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 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 :) [Bearbeiten] libsdl_imageMit 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 time make sudo time make install [Bearbeiten] libsdl_gfxDiese 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 [Bearbeiten] TestprogrammeDie 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:
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. [Bearbeiten] SDL-1.2.14 DemoprogrammeIm 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 [Bearbeiten] SDL_gfx-2.0.21 DemoprogrammeIm 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.
2. Hinweis: In den c-Dateien sind defines/konstanten für die Auflösung definiert. Diese sollte man vor dem Kompilieren an sein eigenes Display anpassen. [Bearbeiten] Programm ausführenAm besten den ganzen Ordner in das Dateisystem des Minis kopieren. ./Programmname |