Illegal Instruction mit crosstools ARM XScale Toolchain

Gast #2366937
Lesenswert?
• ▲
▼
Moin,

ich habe ein Problem (naja sonst würde ich ja nicht schreiben).

Ich brauch eine Toolchain um Code für einen fertigen Router zu erzeugen. 
Die Hardware ist ein XScale PXA250 Prozessor mit ARM5 und installiertem 
Linux.

Ich habe eine Toolchain mithilfe der crosstools 
(http://crosstool-ng.org/) erstellt. Bei der Konfiguration habe ich 
darauf geachtet, dass ich ARM auswähle, die FPU auf Software stelle und 
die entsprechenden Linux Header angebe. (Linux Version vom Router und 
die Quellen von kernel.org runtergeladen).

Die Erstellung der Toolchain klappt (mit -mcpu=xscale -mfloat-abi=soft 
-static) aber wenn ich anschließed das Programm ausführe bekomme ich 
eine Illegal Instuction.

Bei dem Vergleich einer Datei auf dem Router mit dem selbst generierten 
HalloWelt Programm erhalte ich noch folgende unterschiede:

Funtionierende Datei des Routers: file init
init: ELF 32-bit LSB executable, ARM, version 1, dynamically linked 
(uses shared libs), for GNU/Linux 2.2.0, stripped

Mein Programm: file a.out
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically 
linked, not stripped

Funtionierende Datei des Routers: readelf -h init
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            ARM
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x9890
  Start of program headers:          52 (bytes into file)
  Start of section headers:          26244 (bytes into file)
  Flags:                             0x2, has entry point, GNU EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         6
  Size of section headers:           40 (bytes)
  Number of section headers:         27
  Section header string table index: 26

Mein Programm: file a.out
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x80b0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          45868 (bytes into file)
  Flags:                             0x5000002, has entry point, 
Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         4
  Size of section headers:           40 (bytes)
  Number of section headers:         22
  Section header string table index: 19


Hat jemand ne Ahnung woran es liegen kann und eine Idee? Ich vermute die 
AS/ABI Version und suche da gerade (mit wenig erfolg) weiter...

Ich würde mich für jeden Tip freuen...

Mfg Michael
Gast #2367957
Lesenswert?
• ▲
▼
Hi,

zur erstellung des Programms habe ich alle mit dem richtigen prefix 
aufgerufen.

Ich habe gerade eine ganz alte Toolchain von einem entwicklungsboard 
ausprobiert und hier kommt das problem nicht... hier wird auch die 
richtige OS/ABI version angezeigt (ARM geht UNIX - System V nicht)...

Also liegt es daran... ich muss es hinbekommen mit der neuen generierten 
Toolchain Programme mit dieser option erstellen...

Ich habe im Internet geschaut aber noch nicht viel dazu gefunden...

Wenn jemand eine Idee hat wie ich diese änderung hinbekomme freue ich 
mich weiterhin...

Ich suche auch weiter und wenn ich die Lösung habe lasse ich es auch 
wissen...

Mfg
Gast #2369529
Lesenswert?
• ▲
▼
Hey,

die "alte" aber funtionierende Toolchain hat das Prefix 
arm-unknown-linux-gnu-*.

Die neue generierte mit den neuen Versionen von binutils gcc und glibc 
trägt das prefix arm-unknown-linux-eabi-*

hm durch welche genaue einstellung wird dieses definiert?

Mfg

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.