This will be the end of me

This commit is contained in:
2024-09-02 20:55:25 +03:00
parent 12e9a068e9
commit 08b2d22662
4 changed files with 52 additions and 7 deletions

View File

@@ -124,6 +124,8 @@ pub struct MemInfo<'a>{
pub kernel_end: usize,
pub mb_start: usize,
pub mb_end: usize,
pub vga_vide_start: usize,
pub vga_vide_size: usize,
}
impl MemInfo<'_> {
@@ -148,6 +150,9 @@ impl MemInfo<'_> {
let kernel_end = elf_secs.clone().filter(|s| s.is_allocated()).map(|s| s.end_address()).min().unwrap() as usize;
let mb_start = boot_info.start_address();
let mb_end = boot_info.end_address();
let vv_info = boot_info.framebuffer_tag().unwrap().unwrap();
let vv_start = vv_info.address();
let vv_size = vv_info.width() * vv_info.height();
//log::debug!("Kernel: start: 0x{:x} sz: 0x{:x}", mi.kernel_start, mi.kernel_end - mi.kernel_start);
//log::debug!("Multiboot: start: 0x{:x} sz: 0x{:x}", mi.mb_start, mi.mb_end - mi.mb_start);
@@ -159,6 +164,8 @@ impl MemInfo<'_> {
kernel_end,
mb_start,
mb_end,
vga_vide_start: vv_start as usize,
vga_vide_size: vv_size as usize
}
}
}

View File

@@ -205,8 +205,13 @@ pub fn remap_the_kernel<A>(allocator: &mut A, mem_info: &MemInfo) -> ActivePageT
mapper.identity_map(frame, flags, allocator);
}
}
let vga_buffer_frame = Frame::containing_address(0xb8000);
mapper.identity_map(vga_buffer_frame, EntryFlags::WRITABLE, allocator);
let vga_text_buffer_frame = Frame::containing_address(0xb8000);
let vga_video_buffer_frame_start = Frame::containing_address(mem_info.vga_vide_start);
let vga_video_buffer_frame_end = Frame::containing_address((mem_info.vga_vide_start + mem_info.vga_vide_size*3));
for frame in Frame::range_inclusive(vga_video_buffer_frame_start, vga_video_buffer_frame_end) {
mapper.identity_map(frame, EntryFlags::PRESENT | EntryFlags::WRITABLE, allocator);
}
mapper.identity_map(vga_text_buffer_frame, EntryFlags::WRITABLE, allocator);
let multiboot_start = Frame::containing_address(mem_info.boot_info.start_address());
let multiboot_end = Frame::containing_address(mem_info.boot_info.end_address() - 1);
for frame in Frame::range_inclusive(multiboot_start, multiboot_end) {