Forum: Compiler & IDEs SDL auf BeagleBoard


von Marcel (Gast)


Lesenswert?

Hi,

ich will mich ein bisschen tiefer in Linux/EmbeddedLinux einarbeiten und 
habe mir dafür ein BeagleBoard gekauft.

Allerdings macht mir das CrossCompilieren Probleme. Das obligatorische 
HelloWorld-Programm bekomme ich noch problemlos uebersetzt und 
ausgeführt.
Allerdings scheitert es schon beim nächsten Problem. Ich würde gerne 
einen Sound per SDL abspielen. Dafür versuchte ich zunächst die Lib zu 
bauen.
Dafür bin ich nach der folgenden Anleitung vorgegangen: 
http://www.crosscompile.org/static/pages/SDL.html

Mein configure-Befehl sah wiefolgt aus:

sudo ./configure --host=arm-none-linux-gnueabi 
--prefix=/opt/external_packages/sdl/1.2.13/compiled/arm-none-linux-gnuea 
bi

Der Befehl schloss auch ohne Probleme ab, ein make und anschließendes 
make install war möglich. Beim bauen meines Beispielprogrammes schlug 
das ganze allerdings fehl.

Mein Befehl:

arm-none-linux-gnueabi-gcc -Wall -O2 -mcpu=cortex-a8 -march=armv7-a 
-L/opt/external_packages/sdl/1.2.13/compiled/arm-none-linux-gnueabi/lib 
-Wl,-rpath,/opt/external_packages/sdl/1.2.13/compiled/arm-none-linux-gnu 
eabi/lib  -lSDL -lpthread 
-I/opt/external_packages/sdl/1.2.13/compiled/arm-none-linux-gnueabi/incl 
ude/SDL  -D_REENTRANT -o tut1 tut1.c

Dabei erscheint dann lediglich ein:

/opt/external_packages/sdl/1.2.13/compiled/arm-none-linux-gnueabi/lib/li 
bSDL.so:  file not recognized: File format not recognized

Ich gehe davon aus, das beim Bauen der Lib der reguläre gcc benutzt 
wurde, anstelle des eigentlich CrossCompilers 
arm-none-linux-gnueabi-gcc.

Davon lies ich mich an dieser Stelle natürlich nicht entmutigen, 
kopierte mir die Dateien (Libs und Include) einfach auf mein 
Host-System. Anschließend konnte ich meine Anwendung problemlos bauen.

arm-none-linux-gnueabi-gcc -Wall -O2 -mcpu=cortex-a8 -march=armv7-a 
-L/home/marcel/nfsmount -Wl,-rpath,/home/marcel/nfsmount -lSDL 
-I/home/marcel/nfsmount/SDL -D_REENTRANT -o tut1 tut1.c

Beim Ausführen auf dem BeagleBoard erscheint aber lediglich ein Knacken 
auf meinen Lautsprechern, zusammen mit der Ausgabe in der Konsole:

ALSA lib pcm.c:7316:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:7316:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:7316:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:7316:(snd_pcm_recover) underrun occurred
usw.

Verschiedene Wav-Dateien bzw. Konfiguration innerhalb des Programms 
lösen das Problem nicht. Die gleiche Anwendung, übersetzt auf meinem 
Hostsystem (Ubuntu, 64Bit) läuft wie gewollt.

Weiß wer weiter, wie ich a) die SDL richtig durch den CrossCompiler jage 
und b) warum das ganze nicht auf dem Target richtig läuft?

von Bernd (Gast)


Lesenswert?

Hallo,

Ich würde dir empfehlen ein rootstock (Google mal danach) Image zu 
erzeugen. Dann kann du entweder direkt auf der Beagleboard Hardware 
kompilieren, oder per qemu auf dem Host. Das macht das Leben deutlich 
einfacher als Crosstoolchain einzurichten und zu pflegen.

Viel Erfolg,
Bernd

von Klaus W. (mfgkw)


Lesenswert?

Marcel schrieb:
> bisschen tiefer in Linux/EmbeddedLinux

Marcel schrieb:
> /opt/external_packages/sdl/1.2.13/compiled/arm-none-linux...

Marcel schrieb:
> arm-none-linux-gnueabi-gcc

Das mit "none-linux" macht mich etwas stutzig für ein Linuxsystem.
Wie hast du denn dein Hello World kompiliert?

von Verwirrter Anfänger (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Das mit "none-linux" macht mich etwas stutzig für ein Linuxsystem.
> Wie hast du denn dein Hello World kompiliert?

Das ist lediglich die gcc cross compiling naming convention:
cpu-vendor-os-abi
Also:
Architecture: ARM
Vendor: None
OS: linux
Application Binary interface: gnueabi

von Klaus W. (mfgkw)


Lesenswert?

ok, sorry für die Verwirrung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.