diff --git a/kernel/boot/k_bootstrap.c b/kernel/boot/k_bootstrap.c index 9c7ad6c..81a55d6 100644 --- a/kernel/boot/k_bootstrap.c +++ b/kernel/boot/k_bootstrap.c @@ -40,5 +40,12 @@ u32_t k_bootstrap(mb_info_t * mb_info, u32_t mb_magic) DEBUG_LETTER(3, 'd'); + /* + * These functions could destroy the multiboot information block and + * associated structures, so we must be finished reading those structures + * before calling them. + */ + mm_bootstrap(); + return 0; } diff --git a/kernel/mm/mm.c b/kernel/mm/mm.c index 3f02ccb..2b4e339 100644 --- a/kernel/mm/mm.c +++ b/kernel/mm/mm.c @@ -28,3 +28,27 @@ void mm_record_mmap_entry(mb_mmap_t * mmap) k_early_panic("Too many mmap_entries!"); } } + +/************************************************************************** + * This function is run in segmented memory before paging is in effect. * + * It is run after the bootloader information has been read, so we can * + * overwrite that memory now. * + *************************************************************************/ +void mm_bootstrap() +{ + if (mm_mmap_num_entries < 1) + { + k_early_panic("No mmap entries read from bootloader!"); + } + + int mmap_idx, i; + for (mmap_idx = 0; mmap_idx < mm_mmap_num_entries; mmap_idx++) + { + } + + /* Clear the page directory */ + for (i = 0; i < sizeof(page_directory) / sizeof(page_directory[0]); i++) + { + page_directory[i] = 0; + } +} diff --git a/kernel/mm/mm.h b/kernel/mm/mm.h index df38d94..5d9cd9f 100644 --- a/kernel/mm/mm.h +++ b/kernel/mm/mm.h @@ -20,6 +20,7 @@ typedef struct } mm_mem_range_t; void mm_record_mmap_entry(mb_mmap_t * mmap); +void mm_bootstrap(); #endif