X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/844a2c39e4bb2cc778dba7bd3aea21cb07483fad..4c6d990440cdba6c7dd294adb7e435770ffcbcc4:/lunaix-os/kernel/k_init.c diff --git a/lunaix-os/kernel/k_init.c b/lunaix-os/kernel/k_init.c index 642a421..444aab0 100644 --- a/lunaix-os/kernel/k_init.c +++ b/lunaix-os/kernel/k_init.c @@ -4,8 +4,13 @@ #include #include #include +#include +#include #include +#include + +#include #include #include @@ -15,6 +20,12 @@ extern uint8_t __kernel_start; 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(); @@ -35,7 +46,7 @@ _kernel_init(multiboot_info_t* mb_info) { 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(); } @@ -49,6 +60,8 @@ _kernel_post_init() { 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 标识可用的物理页 @@ -87,7 +100,7 @@ setup_memory(multiboot_memory_map_t* map, size_t map_size) { 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 ); } @@ -101,7 +114,7 @@ void 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