diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-04-14 22:47:15 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-04-14 22:47:15 +0800 |
| commit | ac9741e12222e72bad3414bc6f588e70a3d130cc (patch) | |
| tree | 6aace9f63a2ea54c7c3fd1e49e98ff81b638296f /src/kernel/mm/pmm.cc | |
| parent | 1e862099a13266da57ff7c6de11c1a11c42a8112 (diff) | |
| download | lume-ac9741e12222e72bad3414bc6f588e70a3d130cc.tar.gz lume-ac9741e12222e72bad3414bc6f588e70a3d130cc.tar.xz | |
feat: implement FDT-based memory discovery and add comprehensive debug logging to exec syscalls
Diffstat (limited to 'src/kernel/mm/pmm.cc')
| -rw-r--r-- | src/kernel/mm/pmm.cc | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/kernel/mm/pmm.cc b/src/kernel/mm/pmm.cc index 2d0c44f..d3d99ba 100644 --- a/src/kernel/mm/pmm.cc +++ b/src/kernel/mm/pmm.cc @@ -6,6 +6,7 @@ #include "kernel/riscv.h" #include "kernel/pmm.h" #include "kernel/mm.h" +#include "kernel/fdt.h" // #include "kernel/spinlock.h" #include "drivers/uart.h" #include "lib/string.h" @@ -13,6 +14,9 @@ extern "C" char kernel_end[]; extern uint64 g_dtb_addr; +// Default memory size 128MB, will be overwritten by FDT +uint64 g_phys_size = 128 * 1024 * 1024; + namespace PMM { // Global metadata array pointer @@ -74,12 +78,20 @@ namespace PMM void init() { + // Use FDT memory size if available + if (g_devices.mem_size > 0) + { + g_phys_size = g_devices.mem_size; + } + pmm_lock.init("pmm"); uint64 kern_end_pa = PGROUNDUP((uint64)kernel_end); total_pages = (PHYSTOP - KERNBASE) / PGSIZE; - Drivers::uart_puts(ANSI_GREEN "[PMM] Total RAM size: 128MB\n" ANSI_RESET); + Drivers::uart_puts(ANSI_GREEN "[PMM] Total RAM size: "); + Drivers::uart_put_int(g_phys_size / (1024 * 1024)); + Drivers::uart_puts(" MB\n" ANSI_RESET); // Place the mem_map array // mem_map is located immediately after kernel_end mem_map = (struct Page*)kern_end_pa; |
