diff --git a/Makefile b/Makefile index d2c8aaf..8559ad6 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ CROSS=aarch64-linux-gnu- CC=$(CROSS)gcc LD=$(CROSS)ld CFLAGS=-Wall -Wextra -ffreestanding -march=armv8-a+crc -mcpu=cortex-a53 +DEBUG_FLAGS += -g -Og -DDEBUG -fno-omit-frame-pointer -fno-inline LDSCRIPT=rpi3.ld OBJS=crt0.o uart.o hello.o @@ -13,20 +14,26 @@ csrc=$(wildcard *.c) cobj=$(csrc:%.c=%.o) deps=$(csrc:%.c=%.d) $(gasmsrc:%.S=%.d) -all:kernel.bin +KERNEL=kernel.bin + +all:$(KERNEL) kernel.elf: $(cobj) $(gasmobj) $(LDSCRIPT) - $(LD) $(LDFLAGS) -o $@ $(cobj) $(gasmobj) -T$(LDSCRIPT) -Map kernel.map + $(LD) $(LDFLAGS) -o $@ $(gasmobj) $(cobj) -T$(LDSCRIPT) -Map kernel.map -kernel.bin: kernel.elf +$(KERNEL): kernel.elf $(CROSS)objcopy -O binary $< $@ clean: rm -rf $(cobj) $(gasmobj) $(deps) *.bin *.elf *.map -run: kernel.bin +run: $(KERNEL) qemu-system-aarch64 -machine raspi3b -kernel $< +debug: CFLAGS += $(DEBUG_FLAGS) +debug: CXXFLAGS += $(DEBUG_FLAGS) +debug:$(KERNEL) + aarch64-linux-gnu-gdb -q -x debug.gdb ifneq ($(MAKECMDGOALS),clean) diff --git a/debug.gdb b/debug.gdb new file mode 100644 index 0000000..d63e10d --- /dev/null +++ b/debug.gdb @@ -0,0 +1,3 @@ +#add-symbol-file kernel.map +file kernel.elf +target remote | qemu-system-aarch64 -machine raspi3b -S -gdb stdio -kernel kernel.bin