From c338e05648a836cab54f6d29f9a611fa7daffa5c Mon Sep 17 00:00:00 2001 From: nub31 Date: Wed, 3 Sep 2025 11:18:17 +0200 Subject: [PATCH] structure project --- makefile | 18 ++++++++---------- src/{ => arch/x86_64}/interrupts.c | 18 +++++++++--------- src/{ => arch/x86_64}/interrupts.h | 6 +++--- src/{ => arch/x86_64}/keyboard.c | 8 ++++---- src/{ => arch/x86_64}/keyboard.h | 0 src/{ => arch/x86_64}/multiboot.h | 0 src/{ => arch/x86_64}/pmm.c | 16 ++++++++-------- src/{ => arch/x86_64}/pmm.h | 0 src/{ => arch/x86_64}/start.asm | 0 src/kernel.c | 18 +++++++++--------- src/kernel.h | 6 +++--- src/mem.c | 2 +- src/mem.h | 2 +- src/vmm.c | 0 src/vmm.h | 1 - 15 files changed, 46 insertions(+), 49 deletions(-) rename src/{ => arch/x86_64}/interrupts.c (83%) rename src/{ => arch/x86_64}/interrupts.h (86%) rename src/{ => arch/x86_64}/keyboard.c (95%) rename src/{ => arch/x86_64}/keyboard.h (100%) rename src/{ => arch/x86_64}/multiboot.h (100%) rename src/{ => arch/x86_64}/pmm.c (87%) rename src/{ => arch/x86_64}/pmm.h (100%) rename src/{ => arch/x86_64}/start.asm (100%) delete mode 100644 src/vmm.c delete mode 100644 src/vmm.h diff --git a/makefile b/makefile index 7feef78..07e82d6 100644 --- a/makefile +++ b/makefile @@ -2,16 +2,15 @@ CC = x86_64-elf-gcc LD = x86_64-elf-ld AS = nasm +TARGET_PATH = src/arch/x86_64 CFLAGS = -m64 -ffreestanding -fno-builtin -Wall -Wextra -Wshadow -std=c11 -g LDFLAGS = -g ASFLAGS = -f elf64 -g -F dwarf -SRC_C := src/kernel.c src/mem.c src/pmm.c src/vmm.c src/string.c src/vga.c src/interrupts.c src/keyboard.c -SRC_ASM := src/start.asm +SRC_C := $(shell find src -name '*.c') +SRC_ASM := $(shell find src -name '*.asm') -OBJ_C := $(SRC_C:src/%.c=.build/%.o) -OBJ_ASM := $(SRC_ASM:src/%.asm=.build/%.o) -OBJS := $(OBJ_C) $(OBJ_ASM) +OBJS := $(patsubst src/%.c, .build/%.o, $(SRC_C)) $(patsubst src/%.asm, .build/%.o, $(SRC_ASM)) iso: .build/nub-os.iso @echo "ISO created at '.build/nub-os.iso'" @@ -19,9 +18,6 @@ iso: .build/nub-os.iso clean: @rm -r .build 2>/dev/null || true -build-dir: - mkdir .build 2>/dev/null || true - .build/nub-os.iso: .build/kernel grub.cfg mkdir -p .build/nub-os/boot/grub cp grub.cfg .build/nub-os/boot/grub @@ -31,8 +27,10 @@ build-dir: .build/kernel: $(OBJS) $(LD) $(LDFLAGS) -T linker.ld -o $@ $^ -.build/%.o: src/%.c | build-dir +.build/%.o: src/%.c + @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c -o $@ $< -.build/%.o: src/%.asm | build-dir +.build/%.o: src/%.asm + @mkdir -p $(dir $@) $(AS) $(ASFLAGS) -o $@ $< \ No newline at end of file diff --git a/src/interrupts.c b/src/arch/x86_64/interrupts.c similarity index 83% rename from src/interrupts.c rename to src/arch/x86_64/interrupts.c index 1de19ce..594c375 100644 --- a/src/interrupts.c +++ b/src/arch/x86_64/interrupts.c @@ -1,5 +1,5 @@ #include "interrupts.h" -#include "util.h" +#include "../../util.h" #define PIC1_COMMAND 0x20 #define PIC1_DATA 0x21 @@ -55,7 +55,7 @@ void enable_apic() uint64_t apic_base = rdmsr(0x1B); apic_base |= (1 << 11); wrmsr(0x1B, apic_base); - kprintf("APIC enabled\n"); + printf("APIC enabled\n"); } void remap_pic() @@ -74,32 +74,32 @@ void remap_pic() outb(PIC1_DATA, 0); outb(PIC2_DATA, 0); - kprintf("PIC remapped\n"); + printf("PIC remapped\n"); } void disable_pic() { outb(PIC1_DATA, 0xFF); outb(PIC2_DATA, 0xFF); - kprintf("PIC disabled\n"); + printf("PIC disabled\n"); } void handle_exception(const isr_frame_t* frame) { - kprintf("exception[%d]: %s, error code: %d\n", frame->int_no, exception_messages[frame->int_no], frame->err_code); - kpanic(); + printf("exception[%d]: %s, error code: %d\n", frame->int_no, exception_messages[frame->int_no], frame->err_code); + panic(); } void register_irq_handler(uint8_t irq, irq_handler_t handler) { if (irq >= 16) { - kprintf("Cannot register irq %d is out of bounds\n", irq); + printf("Cannot register irq %d is out of bounds\n", irq); } else { irq_handlers[irq] = handler; - kprintf("Registered irq handler at vector %d\n", irq); + printf("Registered irq handler at vector %d\n", irq); } } @@ -132,6 +132,6 @@ void handle_isr(const isr_frame_t* frame) } else { - kprintf("interrupt[%d]: not implemented\n", frame->int_no); + printf("interrupt[%d]: not implemented\n", frame->int_no); } } \ No newline at end of file diff --git a/src/interrupts.h b/src/arch/x86_64/interrupts.h similarity index 86% rename from src/interrupts.h rename to src/arch/x86_64/interrupts.h index 5bb07ac..2fdcff6 100644 --- a/src/interrupts.h +++ b/src/arch/x86_64/interrupts.h @@ -1,6 +1,6 @@ #pragma once -#include "kernel.h" +#include "../../kernel.h" #include #include @@ -26,11 +26,11 @@ void register_irq_handler(uint8_t irq, irq_handler_t handler); static inline void enable_interrupts() { __asm__ volatile("sti"); - kprintf("Interrupts enabled\n"); + printf("Interrupts enabled\n"); } static inline void disable_interrupts() { __asm__ volatile("cli"); - kprintf("Interrupts disabled\n"); + printf("Interrupts disabled\n"); } \ No newline at end of file diff --git a/src/keyboard.c b/src/arch/x86_64/keyboard.c similarity index 95% rename from src/keyboard.c rename to src/arch/x86_64/keyboard.c index 6ccab5d..d443789 100644 --- a/src/keyboard.c +++ b/src/arch/x86_64/keyboard.c @@ -1,7 +1,7 @@ #include "keyboard.h" +#include "../../kernel.h" +#include "../../util.h" #include "interrupts.h" -#include "kernel.h" -#include "util.h" #include #define SCANCODE_LEFT_SHIFT 42 @@ -96,8 +96,8 @@ void register_keypress_handler(const keyboard_handler_t handler) // keyboard_handlers is a dynamic list if (handler_index >= KEYBOARD_HANDLERS_LENGTH) { - kprintf("Maximum keyboard handlers reached\n"); - kpanic(); + printf("Maximum keyboard handlers reached\n"); + panic(); } keyboard_handlers[handler_index] = handler; diff --git a/src/keyboard.h b/src/arch/x86_64/keyboard.h similarity index 100% rename from src/keyboard.h rename to src/arch/x86_64/keyboard.h diff --git a/src/multiboot.h b/src/arch/x86_64/multiboot.h similarity index 100% rename from src/multiboot.h rename to src/arch/x86_64/multiboot.h diff --git a/src/pmm.c b/src/arch/x86_64/pmm.c similarity index 87% rename from src/pmm.c rename to src/arch/x86_64/pmm.c index a1bed2a..1bb65fe 100644 --- a/src/pmm.c +++ b/src/arch/x86_64/pmm.c @@ -1,6 +1,6 @@ #include "pmm.h" -#include "kernel.h" -#include "mem.h" +#include "../../kernel.h" +#include "../../mem.h" #include #include @@ -24,8 +24,8 @@ void init_pmm(multiboot_info_t* mbd) if (!(mbd->flags & (1 << 6))) { - kprintf("Invalid memory map given by bootloader\n"); - kpanic(); + printf("Invalid memory map given by bootloader\n"); + panic(); } uint64_t offset = 0; @@ -42,13 +42,13 @@ void init_pmm(multiboot_info_t* mbd) num_regions++; - kprintf("Available memory: 0x%x - 0x%x (%u KB)\n", mmmt->addr, mmmt->addr + mmmt->len, mmmt->len / 1024); + printf("Available memory: 0x%x - 0x%x (%u KB)\n", mmmt->addr, mmmt->addr + mmmt->len, mmmt->len / 1024); } offset += mmmt->size + sizeof(mmmt->size); } - kmemset(page_bitmap, 0xFF, BITMAP_SIZE); + memset(page_bitmap, 0xFF, BITMAP_SIZE); for (size_t i = 0; i < num_regions; i++) { @@ -67,7 +67,7 @@ void init_pmm(multiboot_info_t* mbd) } else { - kprintf("System has more ram than the bitmap allows!\n"); + printf("System has more ram than the bitmap allows!\n"); break; } } @@ -86,7 +86,7 @@ void init_pmm(multiboot_info_t* mbd) } } - kprintf("PMM initialized\n"); + printf("PMM initialized\n"); } uint64_t pmm_alloc_page() diff --git a/src/pmm.h b/src/arch/x86_64/pmm.h similarity index 100% rename from src/pmm.h rename to src/arch/x86_64/pmm.h diff --git a/src/start.asm b/src/arch/x86_64/start.asm similarity index 100% rename from src/start.asm rename to src/arch/x86_64/start.asm diff --git a/src/kernel.c b/src/kernel.c index e7b1e13..d834a6a 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -1,7 +1,7 @@ #include "kernel.h" -#include "interrupts.h" -#include "multiboot.h" -#include "pmm.h" +#include "arch/x86_64/interrupts.h" +#include "arch/x86_64/multiboot.h" +#include "arch/x86_64/pmm.h" #include "string.h" #include "vga.h" #include @@ -15,18 +15,18 @@ void kmain(multiboot_info_t* mbd) remap_pic(); enable_interrupts(); - kprintf("Welcome to nub OS :)\n"); - khalt(); + printf("Welcome to nub OS :)\n"); + halt(); } -void kpanic() +void panic() { - kprintf("Kernel panic!\n"); + printf("Kernel panic!\n"); disable_interrupts(); - khalt(); + halt(); } -void kprintf(const char* fmt, ...) +void printf(const char* fmt, ...) { va_list args; va_start(args, fmt); diff --git a/src/kernel.h b/src/kernel.h index e88ab5f..daebd26 100644 --- a/src/kernel.h +++ b/src/kernel.h @@ -2,11 +2,11 @@ #include -void kpanic(); +void panic(); -void kprintf(const char* fmt, ...); +void printf(const char* fmt, ...); -static inline void khalt() +static inline void halt() { while (true) { diff --git a/src/mem.c b/src/mem.c index 10cb3ea..a440849 100644 --- a/src/mem.c +++ b/src/mem.c @@ -1,7 +1,7 @@ #include "mem.h" #include -void kmemset(void* destination, uint8_t value, size_t length) +void memset(void* destination, uint8_t value, size_t length) { for (size_t i = 0; i < length; i++) { diff --git a/src/mem.h b/src/mem.h index 8511354..9f3ddc4 100644 --- a/src/mem.h +++ b/src/mem.h @@ -3,4 +3,4 @@ #include #include -void kmemset(void* destination, uint8_t value, size_t length); \ No newline at end of file +void memset(void* destination, uint8_t value, size_t length); \ No newline at end of file diff --git a/src/vmm.c b/src/vmm.c deleted file mode 100644 index e69de29..0000000 diff --git a/src/vmm.h b/src/vmm.h deleted file mode 100644 index 6f70f09..0000000 --- a/src/vmm.h +++ /dev/null @@ -1 +0,0 @@ -#pragma once