EmbDev.net

Forum: ARM programming with GCC/GNU tools make: *** [lejos_nxt_ram.elf] Erreur 1


von Johnny K. (jgiacomo)


Rate this post
useful
not useful
Hi ! I'm using Embedded Linux Development Kit and I have some errors
when I try to execute the makefile to rebuild a firmware (lejos for
nxt):

/opt/eldk/usr/bin/arm-linux-ld: ERROR: init.o uses FPA instructions,
whereas lejos_nxt_ram.elf does not
/opt/eldk/usr/bin/arm-linux-ld: failed to merge target specific data of
file init.o
/opt/eldk/usr/bin/arm-linux-ld: ERROR: interrupts.o uses FPA
instructions, whereas lejos_nxt_ram.elf does not
/opt/eldk/usr/bin/arm-linux-ld: failed to merge target specific data of
file interrupts.o
/opt/eldk/usr/bin/arm-linux-ld: ERROR: vectors.o uses FPA instructions,
whereas lejos_nxt_ram.elf does not
/opt/eldk/usr/bin/arm-linux-ld: failed to merge target specific data of
file vectors.o
/opt/eldk/usr/bin/arm-linux-ld: ERROR: irq.o uses FPA instructions,
whereas lejos_nxt_ram.elf does not
/opt/eldk/usr/bin/arm-linux-ld: failed to merge target specific data of
file irq.o
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/arm/lib/libc.a(strlen.o) does not support interworking,
whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/arm/lib/libc.a(memset.o) does not support interworking,
whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/arm/lib/libc.a(memcpy.o) does not support interworking,
whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/arm/lib/libc.a(wordcopy.o) does not support interworking,
whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_udivsi3.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_divsi3.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_umodsi3.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_modsi3.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_dvmd_lnx.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_addsubsf3.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_muldivsf3.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_cmpsf2.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning:
/opt/eldk/usr/lib/gcc/arm-linux/4.0.0/libgcc.a(_fixsfsi.o) does not
support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: Warning: /opt/eldk/arm/lib/libm.so does
not support interworking, whereas lejos_nxt_ram.elf does
/opt/eldk/usr/bin/arm-linux-ld: error: no memory region specified for
loadable section `.dynamic'
make: *** [lejos_nxt_ram.elf] Erreur 1


I don't manage to solved these errors; Can you help me please?

Here there is the makefile:

  GCC_VERSION :=4.0.0
  COMP_PATH   := /opt/eldk
  LIBPREFIX   := $(COMP_PATH)/arm/lib
  GCC_LIB     :=
$(COMP_PATH)/usr/lib/gcc/arm-linux/$(GCC_VERSION)/libgcc.a
  LIBC        := $(COMP_PATH)/arm/lib/libc.a

  TARGET_PREFIX :=arm-linux
  INC_PATH := $(COMP_PATH)/arm/usr/include
  CC       := $(COMP_PATH)/usr/bin/$(TARGET_PREFIX)-gcc
  AS       := $(COMP_PATH)/usr/bin/$(TARGET_PREFIX)-as
  AR       := $(COMP_PATH)/usr/bin/$(TARGET_PREFIX)-ar
  LD       := $(COMP_PATH)/usr/bin/$(TARGET_PREFIX)-ld
  OBJCOPY  := $(COMP_PATH)/usr/bin/$(TARGET_PREFIX)-objcopy

PHONY: EnvironmentMessage
EnvironmentMessage:
  @echo " CC      $(CC)"
  @echo " AS      $(AS)"
  @echo " AR      $(AR)"
  @echo " LD      $(LD)"
  @echo " OBJCOPY $(OBJCOPY)"


Thanks for any answer.

von Johnny K. (jgiacomo)


Rate this post
useful
not useful
I compile for arm7tdmi.

von Johnny K. (jgiacomo)


Rate this post
useful
not useful
that was the environnment.make.

The real makefile is:

.SUFFIXES:

default: def_target

include environment.mak
include targetdef.mak


RAM_TARGET   := $(TARGET)_ram.elf
ROM_TARGET   := $(TARGET)_rom.elf
SAMBA_TARGET := $(TARGET)_samba_ram.bin
ROMBIN_TARGET := $(TARGET)_rom.bin

RAM_LDSCRIPT   := $(TARGET)_ram.ld
ROM_LDSCRIPT   := $(TARGET)_rom.ld
SAMBA_LDSCRIPT := $(TARGET)_samba.ld

S_OBJECTS := $(S_SOURCES:.s=.o)
C_OBJECTS := $(C_SOURCES:.c=.o) $(C_RAMSOURCES:.c=.oram)

C_OPTIMISATION_FLAGS = -Os
#C_OPTIMISATION_FLAGS = -O0

CFLAGS = -c -ffreestanding -fsigned-char -mcpu=arm7tdmi  \
  $(C_OPTIMISATION_FLAGS) -g  \
  -Winline -Wall -Werror-implicit-function-declaration \
  -I. -I$(VM_DIR) \
         -mthumb -mthumb-interwork -ffunction-sections -fdata-sections

LDFLAGS = -Map $@.map -L$(LIBPREFIX) -lm -cref --gc-sections $(LIBC)

ASFLAGS = -mthumb-interwork  -mfpu=softfpa

def_target: all


ALL_TARGETS := $(RAM_TARGET) $(ROM_TARGET) $(ROMBIN_TARGET)
$(SAMBA_TARGET)


.PHONY:  all
all:  BuildMessage $(ALL_TARGETS)

PHONY: TargetMessage
TargetMessage:
  @echo ""
  @echo "Building: $(ALL_TARGETS)"
  @echo ""
  @echo "C sources: $(C_SOURCES) to $(C_OBJECTS)"
  @echo ""
  @echo "Assembler sources: $(S_SOURCES) to $(S_OBJECTS)"
  @echo ""
  @echo "LD source: $(LDSCRIPT_SOURCE)"
  @echo ""

PHONY: BuildMessage
BuildMessage: TargetMessage EnvironmentMessage


$(SAMBA_LDSCRIPT): $(LDSCRIPT_SOURCE)
  cat $< | sed -e 's/^SAMBA_ONLY//' -e '/^RAM_ONLY/d' -e'/^ROM_ONLY/d'
>$@

$(RAM_LDSCRIPT): $(LDSCRIPT_SOURCE)
  cat $< | sed -e 's/^RAM_ONLY//' -e'/^ROM_ONLY/d' -e'/^SAMBA_ONLY/d'
>$@

$(ROM_LDSCRIPT): $(LDSCRIPT_SOURCE)
  cat $< | sed -e 's/^ROM_ONLY//' -e'/^RAM_ONLY/d' -e'/^SAMBA_ONLY/d'
>$@

$(SAMBA_TARGET)_elf: $(C_OBJECTS) $(S_OBJECTS) $(SAMBA_LDSCRIPT)
  @echo "Linking $@"
  $(LD) -o $@ $(C_OBJECTS) $(S_OBJECTS) -T $(SAMBA_LDSCRIPT) $(LIBC)
$(GCC_LIB) $(LDFLAGS)

$(RAM_TARGET): $(C_OBJECTS) $(S_OBJECTS) $(RAM_LDSCRIPT)
  @echo "Linking $@"
  $(LD) -o $@ $(C_OBJECTS) $(S_OBJECTS) -T $(RAM_LDSCRIPT) $(LIBC)
$(GCC_LIB) $(LDFLAGS)

$(ROM_TARGET): $(C_OBJECTS) $(S_OBJECTS) $(ROM_LDSCRIPT)
  @echo "Linking $@"
  $(LD) -o $@ $(C_OBJECTS) $(S_OBJECTS) -T $(ROM_LDSCRIPT) $(LIBC)
$(GCC_LIB) $(LDFLAGS)

$(ROMBIN_TARGET): $(ROM_TARGET)
  @echo "Generating binary file $@"
  $(OBJCOPY) -O binary $< $@

$(SAMBA_TARGET): $(SAMBA_TARGET)_elf
  @echo "Generating binary file $@"
  $(OBJCOPY) -O binary $< $@

%.o: %.s
  @echo "Assembling $< to $@"
  $(AS)  $(ASFLAGS) -o $@ $<

%.o: %.c
  @echo "Compiling $< to $@"
  $(CC) $(CFLAGS) -o $@ $<


%.oram: %.c
  @echo "Compiling $< to $@"
  $(CC) $(CFLAGS) -o $@ $<


.PHONY: clean
clean:
  @echo "Removing All Objects"
  @rm -f $(S_OBJECTS) $(C_OBJECTS) *.o
  @echo "Removing generated ld scripts"
  @rm  -f *.ld
  @echo "Removing target"
  @rm -f $(ALL_TARGETS)
  @echo "Removing map files"
  @ rm -f *map

-include $(C_SOURCES:.c=.d)

Sorry for this error. Thanks for any help !

von Martin T. (mthomas) (Moderator)


Rate this post
useful
not useful
I suggest to use an arm-elf or arm-eabi toolchain not a arm-linux
toolchain. You can get precompiled binaries for Linux (if this is your
OS) i.e. from gnuarm.org and codesourcery.com
I don't know enough about the arm-linux targets but but with such a
toolchain you may try the compiler-options: -msoft-float or
-mfloat-abi=soft (add to CFLAGS).

von Johnny K. (jgiacomo)


Rate this post
useful
not useful
Martin Thomas wrote:
> I suggest to use an arm-elf or arm-eabi toolchain not a arm-linux
> toolchain. You can get precompiled binaries for Linux (if this is your
> OS) i.e. from gnuarm.org and codesourcery.com
> I don't know enough about the arm-linux targets but but with such a
> toolchain you may try the compiler-options: -msoft-float or
> -mfloat-abi=soft (add to CFLAGS).

I'm in training course and I have to use the arm-linux targets with such
a toolchain.

So I tried the compiler-option: -msoft-float or -mfloat-abi=soft (add to
CFLAGS) but I have exactly the same errors !

Someone can help me please ??

Have a nice day !

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.