Hey Leute ich bekomme morgen mein Raspberry Pi und bin schon sehr gespannt was man damit alles anstellen kann.
Ich würde gerne versuchen ein eigenes kleines Betriebssystem zu schreiben und habe dazu ein paar tutorials durchgelesen ( http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/ ). Da wird mithilfe der YAGARTO ARM tools ein eigener assembler code compiliert sodass man einen kernel als img gebaut bekommt und diesen dann direkt testen kann.
Das Problem ist jetzt dass dort alles in assembler geschrieben ist und ich es einfach schelcht finde damit irgendwas zu programmieren ( bin eher der C/C++ experte ) . Jetzt kenn ich aus anderen Tutotials für eigenes OS für den PC dass man aus assembler mit call funktionen aus seinen C dateien aufrufen kann die dazugelinkt sind.
Meine Frage ist jetzt wie man zu diesem Projekt weitere c dateien einbinden kann ?
Die Makefile sieht so aus:
###############################################################################
# makefile
# by Alex Chadwick
#
# A makefile script for generation of raspberry pi kernel images.
###############################################################################
# The toolchain to use. arm-none-eabi works, but there does exist
# arm-bcm2708-linux-gnueabi.
ARMGNU ?= 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)
Alles anzeigen
Ich denke die Zeile : [font="Monaco, Consolas, Courier, monospace"]OBJECTS := $(patsubst $(SOURCE)%.s,$(BUILD)%.o,$(wildcard $(SOURCE)*.s))[/font]
[font="Monaco, Consolas, Courier, monospace"]ist für die verschiedenen Endungen der dazugehörigen Dateien verantwortlich aber ich hab keeeeine Ahnung wie ich das machen soll dass meine c datei auch mit eingebunden wird. [/font]
[font="Monaco, Consolas, Courier, monospace"]Wäre cool wenn mir jemand helfen könnte :)[/font]