diff --git a/Cargo.lock b/Cargo.lock index 97d2c0b..fdff085 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,6 +57,10 @@ dependencies = [ [[package]] name = "lib_alloc" version = "0.1.0" +dependencies = [ + "linked_list_allocator", + "x86_64", +] [[package]] name = "lib_application" @@ -101,6 +105,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "linked_list_allocator" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" +dependencies = [ + "spinning_top", +] + [[package]] name = "lock_api" version = "0.4.12" @@ -153,6 +166,15 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spinning_top" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" +dependencies = [ + "lock_api", +] + [[package]] name = "volatile" version = "0.4.6" diff --git a/kernel/src/arch/x86_64/memory.rs b/kernel/src/arch/x86_64/memory.rs index 5eaf729..b7dcb90 100644 --- a/kernel/src/arch/x86_64/memory.rs +++ b/kernel/src/arch/x86_64/memory.rs @@ -9,9 +9,6 @@ use x86_64::{ PhysAddr, VirtAddr, }; -#[global_allocator] -static ALLOCATOR: FoundryAllocator = FoundryAllocator; - /// Returns a mutable reference to the current level 4 page table. /// /// # Safety diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index dc8d5d9..7df15db 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -4,6 +4,7 @@ extern crate alloc; use core::arch::asm; +use lib_alloc::allocator::init_heap; use limine::request::{RequestsEndMarker, RequestsStartMarker}; use limine::BaseRevision; @@ -67,7 +68,9 @@ pub fn boot() -> Result<(), &'static str> { x86_64::instructions::interrupts::enable(); let physical_memory_offset = VirtAddr::new(*memmap::PHYSICAL_MEMORY_OFFSET); - let l4_table = unsafe { memory::init(physical_memory_offset) }; + let mut l4_table = unsafe { memory::init(physical_memory_offset) }; + + init_heap(&mut l4_table, &mut frame_allocator); Ok(()) } diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 5c5ddbf..77f4ac4 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -1,6 +1,10 @@ #![no_std] #![no_main] +extern crate alloc; + +use alloc::vec::Vec; + use foundry_os::{println, println_log}; #[no_mangle] @@ -40,5 +44,11 @@ unsafe extern "C" fn kmain() -> ! { " ); + let mut vec = Vec::new(); + for i in 0..100 { + vec.push(i); + } + println!("{:?}", vec); + loop {} }