From 4142cff3e61bc11d306d8e3f051ae7dea69b4dcf Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 13 Feb 2016 17:06:20 +0100 Subject: [PATCH] Identity map the multiboot info structure --- src/memory/paging/mod.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/memory/paging/mod.rs b/src/memory/paging/mod.rs index cfac8430..55ab8e27 100644 --- a/src/memory/paging/mod.rs +++ b/src/memory/paging/mod.rs @@ -158,6 +158,7 @@ pub fn remap_the_kernel(allocator: &mut A, boot_info: &BootInformation) let elf_sections_tag = boot_info.elf_sections_tag() .expect("Memory map tag required"); + // identity map the allocated kernel sections for section in elf_sections_tag.sections() { use multiboot2::ELF_SECTION_ALLOCATED; @@ -183,8 +184,19 @@ pub fn remap_the_kernel(allocator: &mut A, boot_info: &BootInformation) } } + // identity map the VGA text buffer let vga_buffer_frame = Frame::containing_address(0xb8000); mapper.identity_map(vga_buffer_frame, WRITABLE, allocator); + + // identity map the multiboot info structure + let multiboot_start = boot_info as *const _ as usize; + let range = Range { + start: multiboot_start, + end: multiboot_start + (boot_info.total_size as usize), + }; + for address in range.step_by(PAGE_SIZE) { + mapper.identity_map(Frame::containing_address(address), PRESENT, allocator); + } }); let old_table = active_table.switch(new_table);