Kann Binary nicht ausführen. arm-linux-gnueabi

#3979576
Lesenswert?

Hallo zusammen,
  ich muss mal wieder nachfragen, da ich ein Problem mit dem 
CrossCompiling habe. Ich hab es bis jetzt nicht geschafft eine 
Cross-Toolchain für mein Arietta G25 zu basteln, wesswegen ich die 
glorreiche Idee hatte eine andere Toolchain zu nehmen. Im Netz hab ich 
eine Toolchain mit dem Namen 
"gcc-linaro-arm-linux-gnueabi-2012.04-20120426_win32" gefunden, die 
meiner Ansicht nach am besten passen sollte. Leider kenn ich mich mit 
GCC nicht so gut aus, und hab bis jetzt noch keine einfache und kurze 
Doku gefunden, die für mich die grobe Struktur von GCC darlegt. Nun hab 
ich versucht mit der Toolchain ein Hello World Programm zu übersetzten. 
Ich bekomme eine Binary, die ich allerdings nicht ausführen kann. Ich 
bekomme nur die Fehlermeldung :"Illegal Instruction". Ich hab keine 
Ahnung, wieso die Datei nicht läuft. Zum testen hab ich noch eine Datei 
auf dem Arietta erstellt und mit der anderen Binärdatei verglichen.

Nativ übersetzt:
1
$ readelf -h nativ.ex
2
ELF Header:
3
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
4
  Class:                             ELF32
5
  Data:                              2's complement, little endian
6
  Version:                           1 (current)
7
  OS/ABI:                            UNIX - System V
8
  ABI Version:                       0
9
  Type:                              EXEC (Executable file)
10
  Machine:                           ARM
11
  Version:                           0x1
12
  Entry point address:               0x831c
13
  Start of program headers:          52 (bytes into file)
14
  Start of section headers:          1840 (bytes into file)
15
  Flags:                             0x5000002, has entry point, Version5 EABI
16
  Size of this header:               52 (bytes)
17
  Size of program headers:           32 (bytes)
18
  Number of program headers:         8
19
  Size of section headers:           40 (bytes)
20
  Number of section headers:         31
21
  Section header string table index: 28
22

23
$ file nativ.ex
24
nativ.ex: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=48c5786788dcb15d1deb1dc748139f8feaf67da6, not stripped

Cross-Compiled
1
$ readelf -h a.out
2
ELF Header:
3
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
4
  Class:                             ELF32
5
  Data:                              2's complement, little endian
6
  Version:                           1 (current)
7
  OS/ABI:                            UNIX - System V
8
  ABI Version:                       0
9
  Type:                              EXEC (Executable file)
10
  Machine:                           ARM
11
  Version:                           0x1
12
  Entry point address:               0x8768
13
  Start of program headers:          52 (bytes into file)
14
  Start of section headers:          359072 (bytes into file)
15
  Flags:                             0x5000002, has entry point, Version5 EABI
16
  Size of this header:               52 (bytes)
17
  Size of program headers:           32 (bytes)
18
  Number of program headers:         6
19
  Size of section headers:           40 (bytes)
20
  Number of section headers:         29
21
  Section header string table index: 26
22

23
$ file a.out
24
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=f1ec2054a52be7f57b66b6b4d49fad06407c6613, not stripped

Wo liegt das Problem? Was muss ich an der Toolchain ändern, damit ich 
für das Arietta Programme erstellen kann?

Gruß,
   SIGINT
#3979933
Lesenswert?

Sigint 112 schrieb:
> Es läuft!!!  Ich musste mit "-march=armv5" nur die richtige Architektur
> wählen. Gibts ne Möglichkeit die Architektur irgendwo fest in den Linker
> zu verankern?
>
> Gruß,
>   SIGINT

Das ist ja dann wohl ein "multiarch"-gcc?

Welchen Code der erzeugt, wenn -march=xxx beim Compileraufruf fehlt, 
bestimmt die Option "--with-arch=xxx" beim configure des Compilers.
#3999218
Lesenswert?

Sigint 112 schrieb:
> Komischerweise kennt der Linux Kern nur ARCH=arm.

Der Linux-Kern kennt sehr wohl alle ARM-Varianten. Wenn du mal unter 
arch/arm/Makefile guckst, dann findest du dort eine Reihe von 
Compiler-Optionen, die abhängig von der Kernel-Konfiguration gesetzt 
werden. Da der ARM-GCC sehr generisch ist und meist viele ARM-Varianten 
unterstützt, müssen halt entsprechende Optionen übergeben werden.

Gruß
Marius

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren