This commit is contained in:
mii443
2025-07-02 23:47:20 +09:00
parent 6c4d79ef2e
commit 12c91e0a6f
2 changed files with 19 additions and 6 deletions

View File

@@ -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);
let lv4_table = paging::init_page_table(&mut bitmap_table);
let mut mapper = unsafe { OffsetPageTable::new(lv4_table, VirtAddr::new(0x0)) };
let mut mapper = {
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();

View File

@@ -1,5 +1,5 @@
use x86_64::{
registers::control::Cr3,
registers::control::{Cr3, Cr3Flags},
structures::paging::{
page_table::FrameError, FrameAllocator, PageSize, PageTable, PageTableFlags, PhysFrame,
Size1GiB, Size4KiB,
@@ -7,8 +7,10 @@ use x86_64::{
PhysAddr, VirtAddr,
};
pub fn init_page_table(frame_allocator: &mut impl FrameAllocator<Size4KiB>) -> &mut PageTable {
let (_, lv4_table) = new_page_table(frame_allocator);
use crate::info;
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 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(