From aa8cab945b3c234f1d4bac6e44ec13a0a2a5ed49 Mon Sep 17 00:00:00 2001 From: Erin Date: Sun, 4 Jun 2017 15:55:16 -0500 Subject: [PATCH] Temporary test function for paging --- src/arch/x86_64/memory/mod.rs | 2 ++ src/arch/x86_64/memory/paging/mod.rs | 26 ++++++++++++++++++++++++++ src/lib.rs | 8 ++++---- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/arch/x86_64/memory/mod.rs b/src/arch/x86_64/memory/mod.rs index e059ad9..e2a5f8f 100644 --- a/src/arch/x86_64/memory/mod.rs +++ b/src/arch/x86_64/memory/mod.rs @@ -7,6 +7,8 @@ mod paging; pub use self::area_frame_allocator::AreaFrameAllocator; +pub use self::paging::test_paging; + /// The physical size of each frame. pub const PAGE_SIZE: usize = 4096; diff --git a/src/arch/x86_64/memory/paging/mod.rs b/src/arch/x86_64/memory/paging/mod.rs index 682dfc1..fc926a4 100644 --- a/src/arch/x86_64/memory/paging/mod.rs +++ b/src/arch/x86_64/memory/paging/mod.rs @@ -190,3 +190,29 @@ impl Page { (self.index >> 0) & 0o777 } } + +/// Temporary function to test paging +pub fn test_paging(allocator: &mut A) where A: FrameAllocator { + let mut page_table = unsafe {ActivePageTable::new()}; + + // test stuff + + let addr = 42 * 515 * 515 * 4096; + let page = Page::containing_address(addr); + let frame = allocator.alloc_frame().expect("no more frames"); + println!("vaddr->phys = {:?}, map to {:?}", page_table.translate(addr), frame); + page_table.map_to(page, frame, EntryFlags::empty(), allocator); + println!("vaddr->phys = {:?} (after mapping)", page_table.translate(addr)); + println!("next frame: {:?}", allocator.alloc_frame()); + + println!("{:#x}", unsafe { + *(Page::containing_address(addr).start_address() as *const u64) + }); + + page_table.unmap(Page::containing_address(addr), allocator); + println!("vaddr->phys = {:?} (should be None)", page_table.translate(addr)); + + // println!("{:#x}", unsafe { + // *(Page::containing_address(addr).start_address() as *const u64) + // }); +} diff --git a/src/lib.rs b/src/lib.rs index 252d199..fcfc4e5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,11 +14,11 @@ extern crate bitflags; extern crate x86; extern crate multiboot2; -mod arch; #[macro_use] -mod macros; +pub mod macros; mod misc; mod logger; +mod arch; use arch::x86_64::device::vga_console; use arch::x86_64::memory; @@ -63,8 +63,8 @@ pub extern fn kernel_main(multiboot_info_pointer: usize) { kernel_start as usize, kernel_end as usize, multiboot_start, multiboot_end, memory_map_tag.memory_areas()); - info!("allocated frame @ 0x{:?}", frame_allocator.alloc_frame()); - + memory::test_paging(&mut frame_allocator); + println!("-- memory paging test finished --"); loop {} }