www.mikrocontroller.net

Forum: Compiler & IDEs lpc2148_demo newlib probleme


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche gerade mit der arm-elf-gcc toolchain von hier: 
http://embdev.net/articles/ARM_GCC_toolchain_for_L... (OS 
X Intel)

folgendes Projekt zu bauen:
http://jcwren.com/arm/

Nun erst einmal hat er ein bischen proble mit ein paar assember befehlen
(push {r0} und pop {r0})
Das kommt aber nur im keyboard und lcd sachen vor, also hab ich die 
einfach rausgenommen, da ich die sowieso nicht brauche.
Dann compiliert alles.

Nur das linken geht jetzt noch schief. Es scheint irgendwie was mit der 
Newlib schief zu gehen. So wie ich das verstehe wurde in der arm-elf-gcc 
toolchain Newlib ja ohne Syscalls compiliert. Da die ja ohne os nicht 
wirklich vorhanden sind.
Jetzt gibt es im lpc2148_demo Projekt ein Datei newlib/syscalls.c welche 
ja die nötigen syscalls bereitstellt. Nur der linker findet das 
irgendwie nicht. Ich erhalte folgenden Fehler:

mediaplayer:lpc2148_demo tpost$  make
/Users/tpost/Downloads/lpc2148_demo/common/common.a(ff.o): In function 
`f_sync':
/Users/tpost/Downloads/lpc2148_demo/fatfs/ff.c:1140: undefined reference 
to `get_fattime'
/Users/tpost/Downloads/lpc2148_demo/common/common.a(ff.o): In function 
`f_mkdir':
/Users/tpost/Downloads/lpc2148_demo/fatfs/ff.c:1533: undefined reference 
to `get_fattime'
/Users/tpost/Downloads/lpc2148_demo/common/common.a(ff.o): In function 
`f_open':
/Users/tpost/Downloads/lpc2148_demo/fatfs/ff.c:917: undefined reference 
to `get_fattime'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(mal 
locr.o):  In function `_malloc_r':
../../../.././newlib/libc/stdlib/mallocr.c:2160: undefined reference to 
`_sbrk_r'
../../../.././newlib/libc/stdlib/mallocr.c:2197: undefined reference to 
`_sbrk_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(std 
io.o):  In function `__sclose':
../../../.././newlib/libc/stdio/stdio.c:120: undefined reference to 
`_close_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(std 
io.o):  In function `__sseek':
../../../.././newlib/libc/stdio/stdio.c:103: undefined reference to 
`_lseek_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(std 
io.o):  In function `__swrite':
../../../.././newlib/libc/stdio/stdio.c:76: undefined reference to 
`_lseek_r'
../../../.././newlib/libc/stdio/stdio.c:84: undefined reference to 
`_write_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(std 
io.o):  In function `__sread':
../../../.././newlib/libc/stdio/stdio.c:47: undefined reference to 
`_read_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(sys 
times.o):  In function `times':
../../../.././newlib/libc/syscalls/systimes.c:11: undefined reference to 
`_times_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(tim 
e.o):  In function `time':
../../../.././newlib/libc/time/time.c:50: undefined reference to 
`_gettimeofday_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(fre 
er.o):  In function `_malloc_trim_r':
../../../.././newlib/libc/stdlib/mallocr.c:3326: undefined reference to 
`_sbrk_r'
../../../.././newlib/libc/stdlib/mallocr.c:3335: undefined reference to 
`_sbrk_r'
../../../.././newlib/libc/stdlib/mallocr.c:3340: undefined reference to 
`_sbrk_r'
/opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(mak 
ebuf.o):  In function `__smakebuf':
../../../.././newlib/libc/stdio/makebuf.c:52: undefined reference to 
`_fstat_r'
collect2: ld returned 1 exit status
make: *** [lpc2148.elf] Error 1
mediaplayer:lpc2148_demo tpost$

Kann mir da irgendjemand weiterhelfen?

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
>...
> Nun erst einmal hat er ein bischen proble mit ein paar assember befehlen
> (push {r0} und pop {r0})

Das dürfte nicht sein. Evtl. syntax unified in den Assemblercode 
schreiben, falls inline assembler: wird im thumb mode compiliert?

> mediaplayer:lpc2148_demo tpost$  make

Zumindest die Aufrufe inkl. aller Parameter sollte man zeigen, sonst 
fehlt zu viel Kontext.

> /Users/tpost/Downloads/lpc2148_demo/common/common.a(ff.o): In function
> `f_sync':
> /Users/tpost/Downloads/lpc2148_demo/fatfs/ff.c:1140: undefined reference
> to `get_fattime'

Das sieht nicht so aus, wie die üblichen syscalls Geschichten. Die 
Quellcodedatei in der get_fattime implementiert ist sicher ebenfalls 
kompiliert und Objektdatei mitgelinkt?

> /opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(mal 
locr.o):
> In function `_malloc_r':
> ../../../.././newlib/libc/stdlib/mallocr.c:2160: undefined reference to
> `_sbrk_r'

o.k., das ist einer der Üblichen. Nachsehen ob in "syscalls.c" eine 
Funktion sbrk_r implementiert ist. Sicherstellen, dass syscalls 
compiliert und syscalls.o gelinkt wird. Damit sollten ein paar Meldungen 
weniger auftauchen, den Rest dann nochmal zeigen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für die hilfe!

Martin Thomas schrieb:
>>...
>> Nun erst einmal hat er ein bischen proble mit ein paar assember befehlen
>> (push {r0} und pop {r0})
>
> Das dürfte nicht sein. Evtl. syntax unified in den Assemblercode
> schreiben, falls inline assembler: wird im thumb mode compiliert?
>
Ja es war inline assembler. Hab den jetzt einfach auf arm code geändert.

>> mediaplayer:lpc2148_demo tpost$  make
>
> Zumindest die Aufrufe inkl. aller Parameter sollte man zeigen, sonst
> fehlt zu viel Kontext.
>
>> /Users/tpost/Downloads/lpc2148_demo/common/common.a(ff.o): In function
>> `f_sync':
>> /Users/tpost/Downloads/lpc2148_demo/fatfs/ff.c:1140: undefined reference
>> to `get_fattime'
>
> Das sieht nicht so aus, wie die üblichen syscalls Geschichten. Die
> Quellcodedatei in der get_fattime implementiert ist sicher ebenfalls
> kompiliert und Objektdatei mitgelinkt?
ja da hab ich was vergessen, ist jetzt aber drin
>
>> /opt/arm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libg.a(mal 
locr.o):
>> In function `_malloc_r':
>> ../../../.././newlib/libc/stdlib/mallocr.c:2160: undefined reference to
>> `_sbrk_r'
>
> o.k., das ist einer der Üblichen. Nachsehen ob in "syscalls.c" eine
> Funktion sbrk_r implementiert ist. Sicherstellen, dass syscalls
> compiliert und syscalls.o gelinkt wird. Damit sollten ein paar Meldungen
> weniger auftauchen, den Rest dann nochmal zeigen.

ja die sbrk_r hat da gefehlt. Ich hab sie jetzt einfach mal leer 
implementiert.

void
*_sbrk_r (struct _reent *r, ptrdiff_t nbytes)
{
    return 0;
}

Jetzt scheint er die sbrk_r auch zu finden. (gibt aber natürlich noch 
warning für unused parameter). Nun scheinen da aber alle reentrant 
syscalls zu fehlen. Heist das jetzt ich muss die alle selbst 
implementieren? Oder krieg ich die irgendwo bereits fertig implementiert 
für meinen arm? Müsste ja eigentlich schon mal jemand gemacht haben 
oder?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

bei mir compiliert es (unter Linux) mit dieser Toolchain:

http://blog.nutaksas.com/2009/05/installing-gnuarm...

Zu ändern:

NEWLIB=newlib-1.17.0
in
NEWLIB=newlib-1.16.0

dann läuft es.

Grüße
Michael

P.S. Auf einem Windowssystem läuft das auch in einer Virtualbox z.B.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.