GNU ARM Toolchain makefile probleme



  • Hallo Leute ich hab mir letztens das Raspberry Pi zugelegt und wollte mal ein kleines eigenes OS schreiben ( zunächst nur den kernel ) zum lernen.

    Und zwar gibts da eine Seite: http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/downloads.html

    dort wird beschrieben wie man das macht mit Beispielen (.. ist jetzt egal )

    Ich hab mir diese GNU tools runtergeladen und die utils..sodass ich jetzt compiler für arm prozessoren habe ( Ass,c/c++...).

    Mein Problem ist jetzt dass ich projekte mit mehr als einer Datei nicht kompiliert werde, da meiner meinung nach ( ich hab noch nicht wirklich plan von makefiles ) die kompilieren .o dateien , die in den vom makefile angelegten build ordner, dafür sorgen dass dieser vom timestamp her nicht aktuell ist und z.b dann beim kompilieren der 2. asm datei dieser ordner nicht mehr als dependency gilt ( also der inhalt des ordners als zu alt angesehen wird und die makefile will dass die ganzen sachen erneut kompiliert werden).

    Das kommt davon dass ich als dependency zum target den build ordner eintrage der im makefile erstellt wird wo auch alle .o dateien hinkommen.

    So sieht das ca. aus:
    mkdir build
    arm-none-eabi-as -I .... ( erste Datei im Ordner wird normal kompiliert)
    make: ***no rule to make target 'build/', needed by 'build/gpio.o' ( 2. Datei im Ordner ) . Stop.

    So sieht das makefile aus:

    ARMGNU = D:\a\bin\arm-none-eabi
    
    # The intermediate directory for compiled object files.
    BUILD = build/
    
    # The directory in which source files are stored.
    SOURCE = source/
    
    # The name of the output file to generate.
    TARGET = kernel.img
    
    # The name of the assembler listing file to generate.
    LIST = kernel.list
    
    # The name of the map file to generate.
    MAP = kernel.map
    
    # The name of the linker script to use.
    LINKER = kernel.ld
    
    # The names of all object files that must be generated. Deduced from the 
    # assembly code files in source.
    OBJECTS := $(patsubst $(SOURCE)%.s,$(BUILD)%.o,$(wildcard $(SOURCE)*.s))
    
    # Rule to make everything.
    all: $(TARGET) $(LIST)
    
    # Rule to remake everything. Does not include clean.
    rebuild: all
    
    # Rule to make the listing file.
    $(LIST) : $(BUILD)output.elf
    	$(ARMGNU)-objdump -d $(BUILD)output.elf > $(LIST)
    
    # Rule to make the image file.
    $(TARGET) : $(BUILD)output.elf
    	$(ARMGNU)-objcopy $(BUILD)output.elf -O binary $(TARGET) 
    
    # Rule to make the elf file.
    $(BUILD)output.elf : $(OBJECTS) $(LINKER)
    	$(ARMGNU)-ld --no-undefined $(OBJECTS) -Map $(MAP) -o $(BUILD)output.elf -T $(LINKER)
    
    # Rule to make the object files.
    $(BUILD)%.o: $(SOURCE)%.s  $(BUILD)
    	$(ARMGNU)-as -I $(SOURCE) $< -o $@
    
    $(BUILD):
    	mkdir $@
    
    # Rule to clean files.
    clean : 
    	-rm -rf $(BUILD)
    	-rm -f $(TARGET)
    	-rm -f $(LIST)
    	-rm -f $(MAP)
    

    Das sind originale downloads von der seite und diese funktionieren einfach nicht...
    Wäre cool wenn mir jemand helfen könnte 🙂


Anmelden zum Antworten