From 4d1474bfc01a755c69a1568ed62fd9afb0b7fd83 Mon Sep 17 00:00:00 2001 From: GBhere Date: Mon, 26 Sep 2022 18:36:09 +0530 Subject: [PATCH 1/3] Add Globally Accessible mapper, frame_allocator --- kernel/src/main.rs | 16 +++++++++------- kernel/src/memory/mod.rs | 17 ++++++++++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 054525f..e828e1b 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -29,18 +29,20 @@ fn panic(_info: &PanicInfo) -> ! { // entry point for kernel entry_point!(kernel_main); fn kernel_main(boot_info: &'static BootInfo) -> ! { - use kernel::memory::BootInfoFrameAllocator; - use kernel::{allocator, memory}; - use x86_64::VirtAddr; + use kernel::memory::{MapperFrameAllocaterInfo}; + use kernel::{allocator}; println!("Hello World{}", "!"); kernel::init(); - let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset); - let mut mapper = unsafe { memory::init(phys_mem_offset) }; - let mut frame_allocator = unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) }; - allocator::init_heap(&mut mapper, &mut frame_allocator).expect("heap initialization failed"); + // let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset); + // let mut mapper = unsafe { memory::init(phys_mem_offset) }; + // let mut frame_allocator = unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) }; + + + let mut mapper_frame_allocator = unsafe{ MapperFrameAllocaterInfo::init(boot_info) }; + allocator::init_heap(&mut mapper_frame_allocator.mapper, &mut mapper_frame_allocator.frame_allocator).expect("heap initialization failed"); // unsafe { // syscalls::init_syscalls(); // } diff --git a/kernel/src/memory/mod.rs b/kernel/src/memory/mod.rs index 89b7aeb..588b837 100644 --- a/kernel/src/memory/mod.rs +++ b/kernel/src/memory/mod.rs @@ -40,7 +40,7 @@ pub fn create_example_mapping( map_to_result.expect("map_to failed").flush(); } -use bootloader::bootinfo::{MemoryMap, MemoryRegionType}; +use bootloader::bootinfo::{MemoryMap, MemoryRegionType,BootInfo}; pub struct BootInfoFrameAllocator { memory_map: &'static MemoryMap, @@ -71,3 +71,18 @@ unsafe impl FrameAllocator for BootInfoFrameAllocator { frame } } + +pub struct MapperFrameAllocaterInfo<'a>{ + pub mapper: OffsetPageTable<'a>, + pub frame_allocator: BootInfoFrameAllocator +} + +impl MapperFrameAllocaterInfo<'_>{ + pub unsafe fn init(boot_info: &'static BootInfo) -> Self { + MapperFrameAllocaterInfo { + mapper: unsafe { init(VirtAddr::new(boot_info.physical_memory_offset)) }, + frame_allocator: unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) } + } + } + +} From 850c6e70571e41b5b5e6ceb28bd110d4c8536c8a Mon Sep 17 00:00:00 2001 From: GBhere Date: Mon, 26 Sep 2022 18:59:39 +0530 Subject: [PATCH 2/3] Add Globally Accessible mapper, frame_allocator --- kernel/src/main.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/kernel/src/main.rs b/kernel/src/main.rs index e828e1b..5522edc 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -35,12 +35,6 @@ fn kernel_main(boot_info: &'static BootInfo) -> ! { println!("Hello World{}", "!"); kernel::init(); - - // let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset); - // let mut mapper = unsafe { memory::init(phys_mem_offset) }; - // let mut frame_allocator = unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) }; - - let mut mapper_frame_allocator = unsafe{ MapperFrameAllocaterInfo::init(boot_info) }; allocator::init_heap(&mut mapper_frame_allocator.mapper, &mut mapper_frame_allocator.frame_allocator).expect("heap initialization failed"); // unsafe { From 2f92d37534710e57abfbbe05c46bced04c828e07 Mon Sep 17 00:00:00 2001 From: GBhere Date: Mon, 26 Sep 2022 19:14:15 +0530 Subject: [PATCH 3/3] Add Globally Accessible mapper, frame_allocator --- kernel/src/main.rs | 12 ++++++++---- kernel/src/memory/mod.rs | 11 +++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 5522edc..af29bc4 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -29,14 +29,18 @@ fn panic(_info: &PanicInfo) -> ! { // entry point for kernel entry_point!(kernel_main); fn kernel_main(boot_info: &'static BootInfo) -> ! { - use kernel::memory::{MapperFrameAllocaterInfo}; - use kernel::{allocator}; + use kernel::allocator; + use kernel::memory::MapperFrameAllocaterInfo; println!("Hello World{}", "!"); kernel::init(); - let mut mapper_frame_allocator = unsafe{ MapperFrameAllocaterInfo::init(boot_info) }; - allocator::init_heap(&mut mapper_frame_allocator.mapper, &mut mapper_frame_allocator.frame_allocator).expect("heap initialization failed"); + let mut mapper_frame_allocator = unsafe { MapperFrameAllocaterInfo::init(boot_info) }; + allocator::init_heap( + &mut mapper_frame_allocator.mapper, + &mut mapper_frame_allocator.frame_allocator, + ) + .expect("heap initialization failed"); // unsafe { // syscalls::init_syscalls(); // } diff --git a/kernel/src/memory/mod.rs b/kernel/src/memory/mod.rs index 588b837..60452d6 100644 --- a/kernel/src/memory/mod.rs +++ b/kernel/src/memory/mod.rs @@ -40,7 +40,7 @@ pub fn create_example_mapping( map_to_result.expect("map_to failed").flush(); } -use bootloader::bootinfo::{MemoryMap, MemoryRegionType,BootInfo}; +use bootloader::bootinfo::{BootInfo, MemoryMap, MemoryRegionType}; pub struct BootInfoFrameAllocator { memory_map: &'static MemoryMap, @@ -72,17 +72,16 @@ unsafe impl FrameAllocator for BootInfoFrameAllocator { } } -pub struct MapperFrameAllocaterInfo<'a>{ +pub struct MapperFrameAllocaterInfo<'a> { pub mapper: OffsetPageTable<'a>, - pub frame_allocator: BootInfoFrameAllocator + pub frame_allocator: BootInfoFrameAllocator, } -impl MapperFrameAllocaterInfo<'_>{ +impl MapperFrameAllocaterInfo<'_> { pub unsafe fn init(boot_info: &'static BootInfo) -> Self { MapperFrameAllocaterInfo { mapper: unsafe { init(VirtAddr::new(boot_info.physical_memory_offset)) }, - frame_allocator: unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) } + frame_allocator: unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) }, } } - }