www.mikrocontroller.net

Forum: GCC ARM uClinux FLAT Code erzeugen

Autor: d. schwab (Gast)
Datum:

Hi

Eigentlich ist die Lösung ganz einfach, gemäss vielen anderen Foren. Man
kompiliert den Programmcode mit der Einstellung -elf2flt und schon hat
man ein flat Binary.

Leider ist es nicht ganz so einfach. Ich beginne mal am Anfang.

Ich habe hier einen kleinen Assemblercode, den ich als FLAT kompilieren
möchte.
.text
        .align  2
        .global _start
_start:
        adr     r1, msg         @ address
        mov     r0, #1          @ stdout
        mov     r2, #11         @ length
        swi     #0x900004       @ sys_write

        mov     r0, #0
        swi     #0x900001       @ sys_exit

        .align  2
msg:
        .asciz  "Hallo Welt\n"

Dieser Assemblercode funktioniert auf einem ARM9 NSLU2 mit einer Debian
installation wunderbar. Das Assemblieren wird so gemacht.
as hallo.s -o hallo.o
ld hallo.o -o hallo
Danach kann das Programm mit
./hallo
aufgerufen werden und der Text wird ausgegeben. Auch mit dem gcc lässt
sich das Programm Assemblieren. Dazu ist folgender Befehl nötig:
gcc -o hello hello.s -nostdlib

Nun das Problem. Damit der Assemblercode auch auf einem ARM7 läuft, muss
man ihn konvertieren ins FLAT Model. Dazu gibt es auch einige Tools z.B.
elf2flt oder man gibt dem gcc die Option -elf2flt für den Linker mit.
Leider komme ich nicht zum gewünschten Ziel.

Weiss jemand die Lösung?

Jedenfalls Danke, dass du dir die Zeit genommen hast dies zu lesen.
bye, Daniel
Autor: Marcus Harnisch (Firma: Doulos) (mharnisch) Benutzerseite
Datum:

d. schwab wrote:
> Leider komme ich nicht zum gewünschten Ziel.

Nicht gerade eine tolle Fehlerbeschreibung. Was genau geht denn nicht?

Gruß
Marcus
http://www.doulos.com/arm/
Autor: Daniel Schwab (dschwab)
Datum:

Hi

Hier die Lösung, falls jemand das gleiche Problem haben sollte.

Der Assemblercode, wie er oben zu sehen ist, ist korrekt für ein NSLU2
(ARM9) mit Debian. Da uClinux ein Binary FLAT Format benötigt (ARM7),
muss der Label "_start" auf "main" geändert werden, weil noch ein
anderer Programmcode hinzugelinkt wird, das aber im Kommandozeilenaufruf
nicht ersichtlich ist.

Den Code mit folgendem Befehl Assemblieren:
arm-elf-gcc -o hallo hallo.s -I/usr/local/arm-elf/include -Wl,-elf2flt

Und nun läufts auch.

bye, Daniel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
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.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net