From 12302df8b3f59de46f9f20ecae57ccf874d0c867 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sat, 20 Mar 2021 16:24:14 +0200 Subject: Add allocator --- src/kernel.cc | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/kernel.cc') diff --git a/src/kernel.cc b/src/kernel.cc index 3110419..05e0daf 100644 --- a/src/kernel.cc +++ b/src/kernel.cc @@ -10,6 +10,7 @@ #include #include +#include "allocator.h" #include "cga.h" #include "cpu/cpu.h" #include "gdt.h" @@ -23,12 +24,15 @@ vmm kvmm; #include "hardware.h" +char buffer[4096]; + +uint32_t check_multiboot(uint32_t, uint32_t); + extern "C" { void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr); void dump_gdt(); -void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t mb_addr) { - +void kernel_main(uint32_t mb_magic, uint32_t mb_addr) { #ifdef HAS_SERIAL0 if constexpr (serial0_console) if (serial0.self_check()) Console::set(&serial0); @@ -52,8 +56,16 @@ void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t m // dump_gdt(); // - if (const auto mb_addr_r = kvmm.map(mb_addr, 0xc03fe000)) { + { + const auto mb_addr_r = kvmm.map(mb_addr, 0xc03fe000); + runtime_assert(mb_addr_r, "Failed to map mb_addr"); + mb_addr = mb_addr_r.value(); + const auto mb_size = check_multiboot(mb_magic, mb_addr); + runtime_assert((mb_size != 0), "Invalid multiboot header"); + + printk("Multiboot2 header at ", uhex{mb_addr}, " size: ", mb_size, '\n'); + // dump_multiboot(mb_magic, mb_addr); } @@ -62,6 +74,9 @@ void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t m // Scheduler s{gdt.descriptor(GDT::kcode)}; Keyboard kb; + MemoryAllocator ma(reinterpret_cast(buffer), sizeof(buffer)); + printk("memory free: ", ma.free_space(), '\n'); + idt.enable(); while (true) asm volatile("hlt"); -- cgit v1.2.1