From 81ff6f13e52d4d633b713ffc23df966faabbf16c Mon Sep 17 00:00:00 2001 From: WangRunji Date: Wed, 11 Jul 2018 23:43:28 +0800 Subject: [PATCH] Fix recursive mapping, finish kernel remap. --- crate/memory/src/memory_set.rs | 2 +- crate/riscv | 2 +- src/arch/riscv32/memory.rs | 1 - src/arch/riscv32/paging.rs | 4 ---- 4 files changed, 2 insertions(+), 7 deletions(-) diff --git a/crate/memory/src/memory_set.rs b/crate/memory/src/memory_set.rs index 049d0d8..e4bdc84 100644 --- a/crate/memory/src/memory_set.rs +++ b/crate/memory/src/memory_set.rs @@ -67,7 +67,7 @@ impl MemoryArea { Some(phys_start) => { for page in Page::range_of(self.start_addr, self.end_addr) { let addr = page.start_address(); - let target = phys_start + page.start_address() - self.start_addr; + let target = page.start_address() - self.start_addr + phys_start; self.flags.apply(pt.map(addr, target)); } } diff --git a/crate/riscv b/crate/riscv index 1022571..48c7d74 160000 --- a/crate/riscv +++ b/crate/riscv @@ -1 +1 @@ -Subproject commit 1022571b07f946add5187f2933f0dabe5819309b +Subproject commit 48c7d74041c38e4f230df02075ad7519c1bf816d diff --git a/src/arch/riscv32/memory.rs b/src/arch/riscv32/memory.rs index fa5ae71..2739e31 100644 --- a/src/arch/riscv32/memory.rs +++ b/src/arch/riscv32/memory.rs @@ -39,7 +39,6 @@ fn remap_the_kernel() { }; static mut SPACE: [u8; 0x1000] = [0; 0x1000]; let mut ms = unsafe { MemorySet::new_from_raw_space(&mut SPACE, kstack) }; - ms.push(MemoryArea::new_identity(stext as usize, etext as usize, MemoryAttr::default().execute().readonly(), "text")); ms.push(MemoryArea::new_identity(sdata as usize, edata as usize, MemoryAttr::default(), "data")); ms.push(MemoryArea::new_identity(srodata as usize, erodata as usize, MemoryAttr::default().readonly(), "rodata")); diff --git a/src/arch/riscv32/paging.rs b/src/arch/riscv32/paging.rs index 3504d10..bee2fc0 100644 --- a/src/arch/riscv32/paging.rs +++ b/src/arch/riscv32/paging.rs @@ -147,13 +147,9 @@ impl InactivePageTable for InactivePageTable0 { fn new_bare() -> Self { let frame = Self::alloc_frame().map(|target| Frame::of_addr(PhysAddr::new(target as u32))) .expect("failed to allocate frame"); - debug!("begin"); active_table().with_temporary_map(&frame, |_, table: &mut RvPageTable| { - debug!("begin1"); - table.zero(); table.set_recursive(RECURSIVE_PAGE_PML4, frame.clone()); - debug!("begin2"); }); InactivePageTable0 { p2_frame: frame } }