wip
This commit is contained in:
@@ -97,8 +97,13 @@ pub extern "sysv64" fn main(usable_memory: &nel_os_common::memory::UsableMemory)
|
|||||||
|
|
||||||
info!("Usable memory in bitmap: {}MiB", usable_frame * 4 / 1024);
|
info!("Usable memory in bitmap: {}MiB", usable_frame * 4 / 1024);
|
||||||
|
|
||||||
let lv4_table = paging::init_page_table(&mut bitmap_table);
|
let mut mapper = {
|
||||||
let mut mapper = unsafe { OffsetPageTable::new(lv4_table, VirtAddr::new(0x0)) };
|
let lv4_table_ptr = paging::init_page_table(&mut bitmap_table);
|
||||||
|
let lv4_table = unsafe { &mut *lv4_table_ptr };
|
||||||
|
unsafe { OffsetPageTable::new(lv4_table, VirtAddr::new(0x0)) }
|
||||||
|
};
|
||||||
|
|
||||||
|
info!("Page table initialized");
|
||||||
|
|
||||||
allocator::init_heap(&mut mapper, &mut bitmap_table).unwrap();
|
allocator::init_heap(&mut mapper, &mut bitmap_table).unwrap();
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use x86_64::{
|
use x86_64::{
|
||||||
registers::control::Cr3,
|
registers::control::{Cr3, Cr3Flags},
|
||||||
structures::paging::{
|
structures::paging::{
|
||||||
page_table::FrameError, FrameAllocator, PageSize, PageTable, PageTableFlags, PhysFrame,
|
page_table::FrameError, FrameAllocator, PageSize, PageTable, PageTableFlags, PhysFrame,
|
||||||
Size1GiB, Size4KiB,
|
Size1GiB, Size4KiB,
|
||||||
@@ -7,8 +7,10 @@ use x86_64::{
|
|||||||
PhysAddr, VirtAddr,
|
PhysAddr, VirtAddr,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn init_page_table(frame_allocator: &mut impl FrameAllocator<Size4KiB>) -> &mut PageTable {
|
use crate::info;
|
||||||
let (_, lv4_table) = new_page_table(frame_allocator);
|
|
||||||
|
pub fn init_page_table(frame_allocator: &mut impl FrameAllocator<Size4KiB>) -> *mut PageTable {
|
||||||
|
let (lv4_frame, lv4_table) = new_page_table(frame_allocator);
|
||||||
let (lv3_frame, lv3_table) = new_page_table(frame_allocator);
|
let (lv3_frame, lv3_table) = new_page_table(frame_allocator);
|
||||||
|
|
||||||
let base_flags = PageTableFlags::PRESENT | PageTableFlags::WRITABLE | PageTableFlags::GLOBAL;
|
let base_flags = PageTableFlags::PRESENT | PageTableFlags::WRITABLE | PageTableFlags::GLOBAL;
|
||||||
@@ -28,7 +30,13 @@ pub fn init_page_table(frame_allocator: &mut impl FrameAllocator<Size4KiB>) -> &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lv4
|
info!("Setting new page table...");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
Cr3::write(lv4_frame, Cr3Flags::empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
lv4_table
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_page_table(
|
fn new_page_table(
|
||||||
|
|||||||
Reference in New Issue
Block a user