SAM9-L9260 Programmieren

FragenSAM9-L9260 Programmieren
Stefan Wüest - Montag, 09. Februar 2009 13:11 Uhr

Hallo,

ich habe hier ein SAM9-L9260 (enthält einen ARM-Prozessor), welches ich programmieren möchte:

http://shop.embedded-projects.net/product_info.php?info=p66_AT91SAM9260-ARM-Prototype-Board–SAM9-L9260-.html&XTCsid=8befeee6bbaeb16b0a225c0b75dc1d10

Darauf läuft ein Linux (Debian). Das Board ist über die serielle Schnittstelle ansprechbar und die Ausgabe kann dort auch beobachtet werden. Sobald das Linux ganz gestartet ist kann auch mit Putty über SSH auf das Linux zugegriffen werden.

Die Ausführung von den enthaltenen Programmen usw funktioniert perfekt.

Bei so einem Embedded-Gerät möchte man natürlich so schnell wie möglich einmal selbst etwas programmieren:

test.c
[code]#include
main()
{
printf(„Hello World \n“);
}
[/code]

Dieser Code funktioniert bestens auf meinem Desktop-Debian.

Um den Code auf dem Target zum laufen zu bringen gibt es zwei Möglichkeiten, soweit ich weiss:

[b]Cross-compiler[/b]
Ich habe mir mehrere Pakete für die ARM-Zielplattform auf meinem Desktop installiert:
[code]arm-binutils 2.16-2 The GNU binary utilities for cross targeting
arm-elf-gcc 2.95.3-2 arm-elf C cross compiler
arm-gcc 3.4.4-2 The GNU C compiler for cross targeting ARM f
arm-glibc 2.3.5-2 The GNU C Library for cross targeting ARM fr
arm-kernel 2.6.10-2 The Linux kernel for ARM (AT91RM9200)[/code]
Wobei der arm-elf-gcc der Cross-Compiler sein sollte.

Kompilieren:
[code]arm-elf-gcc test.c[/code]
Ergebnis:
[code]test.c:1: stdio.h: Datei oder Verzeichnis nicht gefunden[/code]

Funtkioniert also nicht…

[b]Auf dem Target kompilieren[/b]
Das Zielgerät sollte den Code ja auch selbst kompilieren können, dort ist ein gcc enthalten, also gleich mal loslegen:
[code]gcc-4.1 test.c[/code]
Ergebnis:
[code]test.c:1:19: error: stdio.h: No such file or directory
test.c: In function ‚main‘:
test.c:4: warning: incompatible implicit declaration of built-in function ‚printf'[/code]

Funtkioniert auch nicht…

Weiss vielleicht jemand wie ich mein Hello-World-Programm zum laufen bringe? Muss ich noch irgendwelche Pakete auf dem Target installieren?

Vielen Dank für die Hilfe.

mfG toredo

3 Antworten
Stefan Wüest - Montag, 09. Februar 2009 13:14 Uhr

Sry, ich habe einen falschen BBCode genutzt, ich dachte er funktioniert hier. Leider habe ich dann auch keinen Editier-Button gefunden, wenn ein Mod den Thread löschen könnte wäre ich dankbar dann könnte ich einen neuen, schön dargestellten, Thread eröffnen.

Sry & mfG toredo

Marcel Hilzinger - Montag, 09. Februar 2009 15:28 Uhr

gcc allein genügt normalerweise nicht, versuchs mal mit der glibc-devel

Stefan Wüest - Montag, 09. Februar 2009 15:52 Uhr

Hallo,

Danke für die Antwort.
ich ahbe gleich diese Seite gefunden:
http://rpmfind.net/linux/rpm2html/search.php?query=glibc-devel

Hier kann man die glibc-devel für alle möglichen Architekturen herunterladen, nur nicht für ARM (oder gibt es noch einen zweitnamen?)…

Du weisst nicht zufälligerweise wo ich einen Source finde den ich kompilieren kann und der auch zimlich sicher auf dem Zielsystem funktioniert?

Vielen Dank

mfG toredo

Marcel Hilzinger - Montag, 09. Februar 2009 17:40 Uhr

Bei Debian heißt das Paket vermutlich libc6-dev. Also einfach apt-get install libc6-dev aufrufen.

Stefan Wüest - Donnerstag, 12. Februar 2009 09:07 Uhr

hallo,

ich habe den befehl mal ausprobiert, jedoch funktioniert er nicht, ich nehme mal an dass liegt an den nicht vorhandenen (bzw. falschen) Paketquellen, wo jedoch finde ich Paketquellen die für das ARM-Linux passen?

Oder kann ich mir einfach irgendwo den Source von libc6-dev herunterladen und diesen dann kompilieren und installieren (kann ich jedoch nur wenn ein script oder etwas in der Art vorliegt).

Ausgabe:
Reading package lists… Error!
E: Couldn’t make mmap of 12582912 bytes – mmap (22 Invalid argument)
W: Unable to munmap
E: The package lists or status file could not be parsed or opened

mfG toredo

Stefan Wüest - Donnerstag, 12. Februar 2009 11:33 Uhr

Ok, libc6-dev ist installiert, nun läuft auch der Compiler.

Jetzt kommt noch das zweite, CrossCompilieren, wenn ich etwas auf dem Desktop kompiliere kommt auf dem Zielgerät trotzdem immernoch ein Fehler:

sam9-l9260:~# chmod +x hello
sam9-l9260:~# ./hello
-bash: ./hello: No such file or directory

mfG toredo

Marcel Hilzinger - Donnerstag, 12. Februar 2009 11:50 Uhr

probieren Sie doch mal „file hello“ aus, dann erfahren Sie, ob es sich um die richtige oder falsche Architektur handelt.

Oliver Frommel - Donnerstag, 12. Februar 2009 13:28 Uhr

Ich habe nun gerade ein ARM-Target compiliert:

in /etc/apt/sources.list die folgende Zeile eintragen:
deb http://www.emdebian.org/debian/ unstable main

den passenden Key importieren:
apt-get install emdebian-archive-keyring

Repository aktualisieren:
apt-get update

Crosscompiler installieren:
apt-get install gcc-4.2-arm-linux-gnu

Quelldatei
$ cat hello.c
#include

int main (int argc, char **argv) {
printf(„hello“);
}

Compilieren:
arm-linux-gnu-gcc -o hello hello.c

Fertig 🙂
$ file hello
hello: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.6.12, dynamically linked (uses shared libs), not stripped

Stefan Wüest - Montag, 16. Februar 2009 08:37 Uhr

Hallo,

Thx für die Antworten

Danke für den Tip mit dem File-Command. EInen anderen Crosscompiler habe ich bereits gefunden, dieser funktioniert sogar:)

Dierser nennt sich:
arm-unknown-linux-gnu-gcc
Mit dem File-Befehl auf eine kompilierte Datei erscheint:
ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped

Das kompilieren von einfacheren unabhängigen Codes funktioniert ja nun, jedoch noch nicht, wenn gewisse Abhängigkeiten bestehen.

D.h. ich kann diese auf dem Zielsystem zwar installieren und den Code dort kompilieren, das möchte ich jedoch auch direkt auf dem Crosscompiler. Aber wie kann ich dem Crosscompiler diese Pakete hinzufügen?

mfG toredo

Stefan Wüest - Montag, 16. Februar 2009 09:24 Uhr

Hallo,

Ich habe mit jetzt trotdzem noch den von dir empfohlenen Crosscompiler genau nach deiner Anleitung installiert.

Jedoch wurden die Bibliotheken dazu nicht korrekt installiert. (Also z.B. stdio):

VOLAG-DEBIAN:/home/volag/Desktop# arm-linux-gnu-gcc hello.c
hello.c:1:19: error: stdio.h: Datei oder Verzeichnis nicht gefunden
hello.c: In function ‘main’:
hello.c:4: warning: incompatible implicit declaration of built-in function ‘printf’

Der Fehler tratt wahrscheinlich schon bei der Installation auf, falls der Output von „apt-get install gcc-4.2-arm-linux-gnu“ noch zur Analyse des Problems benötigt wird, bitte sagen, denn ich habe ihn abgespeichert.

mfG toredo

Oliver Frommel - Donnerstag, 12. Februar 2009 11:09 Uhr

Hallo,

ich wollte das nachvollziehen, habe aber den Crosscompiler gar nicht im Debian-Repository gefunden. Da frag ich mich natürlich, welches Debian benutzen Sie und woher haben Sie diese Pakete? 🙂

beste Grüße
Oliver Frommel

Deine Antwort