diff options
| author | Carlos Maiolino <[email protected]> | 2025-10-07 08:16:03 +0200 |
|---|---|---|
| committer | Carlos Maiolino <[email protected]> | 2025-10-07 08:19:25 +0200 |
| commit | dae0a3cbf6dba6fc537f943362021f4d8ffcd859 (patch) | |
| tree | 69b6d570edb201039f1071174bca88bdfe1ce13d | |
| parent | 89dd9fbedf488866c240990b970a4285b5a44324 (diff) | |
mm: enable paging and add some test code
Enable paging in the CPU and add some testing code to check
virtual addresses are being redirected.
Signed-off-by: Carlos Maiolino <[email protected]>
| -rw-r--r-- | src/kernel.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/src/kernel.c b/src/kernel.c index 1605191..01de04f 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -6,6 +6,9 @@ #include <toxic/idt.h> #include <toxic/io.h> #include <mm/kernel_heap.h> +#include <mm/paging.h> + +static struct page_directory *kernel_directory; void start_kernel() { @@ -16,19 +19,33 @@ void start_kernel() kernel_heap_init(); interrupts_init(); + kernel_directory = paging_new_directory(PAGING_IS_WRITABLE | + PAGING_IS_PRESENT | + PAGING_USER_ACCESS); + + paging_switch(kernel_directory); + + char *ptr = kzalloc(4096); + char *ptr2; + + paging_map_vaddr(kernel_directory, (void *)0x1000, + ptr, + (PAGING_USER_ACCESS | + PAGING_IS_PRESENT | PAGING_IS_WRITABLE)); + + enable_paging(); enable_interrupts(); + ptr2 = (char *) 0x1000; + ptr[0] = 'A'; + vprintl(ptr); + vprintl(ptr2); - void *ptr = kmalloc(50); - void *ptr2 = kmalloc(5000); - void *ptr3 = kmalloc(5600); + ptr2[1] = 'B'; + vprintl("new ptr\n"); + vprintl(ptr); + vprintl(ptr2); - *((int *)ptr) = 11; kfree(ptr); - void *ptr4 = kmalloc(50); - *((int *)ptr2) = 22; - *((int *)ptr3) = 33; - *((int *)ptr4) = 44; - if (ptr || ptr2 || ptr3 || ptr4) {} } |
