Skip to content

Commit 7ae1194

Browse files
committed
feat: translate virt addr to phys addr
1 parent 5b5fd3d commit 7ae1194

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

src/main.rs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,26 @@ use osdev_rust::println;
1111
entry_point!(kernel_main);
1212

1313
fn kernel_main(boot_info: &'static BootInfo) -> ! {
14-
use osdev_rust::memory::active_level_4_table;
14+
use osdev_rust::memory::translate_addr;
1515
use x86_64::VirtAddr;
16-
use x86_64::structures::paging::PageTable;
1716

1817
println!("Hello World!");
1918

2019
osdev_rust::init();
2120

2221
let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset);
23-
let l4_table = unsafe { active_level_4_table(phys_mem_offset) };
24-
25-
for (i, entry) in l4_table.iter().enumerate() {
26-
if !entry.is_unused() {
27-
println!("L4 Entry: {}: {:?}", i, entry);
28-
29-
let phys = entry.frame().unwrap().start_address();
30-
let virt = phys.as_u64() + boot_info.physical_memory_offset;
31-
let ptr = VirtAddr::new(virt).as_mut_ptr();
32-
let l3_table: &PageTable = unsafe { &*ptr };
33-
34-
for (i, entry) in l3_table.iter().enumerate() {
35-
if !entry.is_unused() {
36-
println!(" L3 Entry {}: {:?}", i, entry);
37-
}
38-
}
39-
}
22+
23+
let addresses = [
24+
0xb8000,
25+
0x201008,
26+
0x0100_0020_1a10,
27+
boot_info.physical_memory_offset,
28+
];
29+
30+
for &address in &addresses {
31+
let virt = VirtAddr::new(address);
32+
let phys = unsafe { translate_addr(virt, phys_mem_offset) };
33+
println!("{:?} -> {:?}", virt, phys);
4034
}
4135

4236
#[cfg(test)]

src/memory.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub unsafe fn active_level_4_table(physical_memory_offset: VirtAddr) -> &'static
1515
}
1616

1717
pub unsafe fn translate_addr(addr: VirtAddr, physical_memory_offset: VirtAddr) -> Option<PhysAddr> {
18-
translate_addr_inner(addr, physical_memory_offset);
18+
translate_addr_inner(addr, physical_memory_offset)
1919
}
2020

2121
fn translate_addr_inner(addr: VirtAddr, physical_memory_offset: VirtAddr) -> Option<PhysAddr> {

0 commit comments

Comments
 (0)