#include <lunaix/mm/page.h>
#include <lunaix/mm/pmm.h>
#include <lunaix/mm/vmm.h>
+#include <lunaix/mm/kalloc.h>
+#include <lunaix/spike.h>
#include <arch/x86/boot/multiboot.h>
+#include <arch/x86/idt.h>
+
+#include <libc/stdio.h>
#include <stdint.h>
#include <stddef.h>
extern uint8_t __kernel_end;
extern uint8_t __init_hhk_end;
+void
+setup_memory(multiboot_memory_map_t* map, size_t map_size);
+
+void
+setup_kernel_runtime();
+
void
_kernel_pre_init(multiboot_info_t* mb_info) {
_init_idt();
mb_info->mem_upper);
unsigned int map_size = mb_info->mmap_length / sizeof(multiboot_memory_map_t);
- setup_memory(mb_info->mmap_addr, map_size);
+ setup_memory((multiboot_memory_map_t*)mb_info->mmap_addr, map_size);
setup_kernel_runtime();
}
for (size_t i = 0; i < hhk_init_pg_count; i++) {
vmm_unmap_page((void*)(i << PG_SIZE_BITS));
}
+
+ assert_msg(kalloc_init(), "Fail to initialize heap");
}
// 按照 Memory map 标识可用的物理页
vmm_map_page(
(void*)(VGA_BUFFER_VADDR + (i << PG_SIZE_BITS)),
(void*)(VGA_BUFFER_PADDR + (i << PG_SIZE_BITS)),
- PG_PREM_RW, PG_PREM_RW
+ PG_PREM_RW
);
}
setup_kernel_runtime() {
// 为内核创建一个专属栈空间。
for (size_t i = 0; i < (K_STACK_SIZE >> PG_SIZE_BITS); i++) {
- vmm_alloc_page((void*)(K_STACK_START + (i << PG_SIZE_BITS)), PG_PREM_RW, PG_PREM_RW);
+ vmm_alloc_page((void*)(K_STACK_START + (i << PG_SIZE_BITS)), PG_PREM_RW);
}
printf("[MM] Allocated %d pages for stack start at %p\n", K_STACK_SIZE>>PG_SIZE_BITS, K_STACK_START);
}
\ No newline at end of file