Kernel Loader: Difference between revisions
Line 125: | Line 125: | ||
Next, it initializes the MMU with a basic identity mapping for Kernel + KernelLdr. | Next, it initializes the MMU with a basic identity mapping for Kernel + KernelLdr. | ||
<pre> | <pre> | ||
// | // Set page table region | ||
page_table_region = ini1_end_address; | |||
page_table_region_size = 0x200000; | |||
g_InitialPageAllocator.Initialize(page_table_region); | |||
// Initialize new page table, eventually ends up in TTBR1_EL1. | |||
KInitialPageTable ttbr1_page_table(&g_InitialPageAllocator); | |||
// Setup MMU with initial identity mapping. | |||
KernelLdr_MapInitialIdentityMapping(&ttbr1_page_table, kernel_base, rw_end_offset, page_table_region, page_table_region_size, &g_InitialPageAllocator); | |||
</pre> | </pre> | ||
Line 165: | Line 174: | ||
<pre> | <pre> | ||
return final_virtual_kernel_base - original_kernel_base; | return final_virtual_kernel_base - original_kernel_base; | ||
</pre> | |||
== KernelLdr_MapInitialIdentityMapping == | |||
Signature is like | |||
void KernelLdr_MapInitialIdentityMapping(KInitialPageTable *ttbr1_page_table, uintptr_t kernel_base, uintptr_t kernel_size, uintptr_t page_tables_base, uintptr_t page_tables_size, InitialPageAllocator *allocator); | |||
<pre> | |||
// TODO: Fill this out with pseudocode. | |||
</pre> | </pre> | ||