Browse Source

Temporary test function for paging

master
3moon 8 years ago
parent
commit
aa8cab945b
3 changed files with 32 additions and 4 deletions
  1. +2
    -0
      src/arch/x86_64/memory/mod.rs
  2. +26
    -0
      src/arch/x86_64/memory/paging/mod.rs
  3. +4
    -4
      src/lib.rs

+ 2
- 0
src/arch/x86_64/memory/mod.rs View File

@ -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;


+ 26
- 0
src/arch/x86_64/memory/paging/mod.rs View File

@ -190,3 +190,29 @@ impl Page {
(self.index >> 0) & 0o777
}
}
/// Temporary function to test paging
pub fn test_paging<A>(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)
// });
}

+ 4
- 4
src/lib.rs View File

@ -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 {}
}


Loading…
Cancel
Save