1
0
Fork 0
forked from koniifer/ableos

Added basic logging support

This commit is contained in:
Erin 2022-12-07 01:43:26 +01:00 committed by ondra05
parent 7652bbf402
commit 8fbf7b5a5a
9 changed files with 27 additions and 26 deletions

1
Cargo.lock generated
View file

@ -585,7 +585,6 @@ dependencies = [
"crossbeam-queue", "crossbeam-queue",
"limine", "limine",
"linked_list_allocator", "linked_list_allocator",
"log",
"slab", "slab",
"spin 0.9.4", "spin 0.9.4",
"tracing", "tracing",

View file

@ -15,7 +15,7 @@ use crate::relib::network::socket::{SimpleSock, Socket};
use crate::{boot_conf::KernelConfig, scratchpad, systeminfo::RELEASE_TYPE}; use crate::{boot_conf::KernelConfig, scratchpad, systeminfo::RELEASE_TYPE};
// use crate::{boot_conf::KernelConfig, scratchpad, systeminfo::RELEASE_TYPE, TERM}; // use crate::{boot_conf::KernelConfig, scratchpad, systeminfo::RELEASE_TYPE, TERM};
use crate::{filesystem, graphics_limine, hardware}; use crate::{filesystem, graphics_limine, hardware};
use kernel::KERNEL_VERSION; use kernel::VERSION;
use limine::LimineSmpInfo; use limine::LimineSmpInfo;
use limine::{LimineFramebufferRequest, LimineSmpRequest}; use limine::{LimineFramebufferRequest, LimineSmpRequest};
@ -151,7 +151,7 @@ pub fn cpu_socket_startup() {
} }
pub fn log_version_data() { pub fn log_version_data() {
info!("{} v{}", RELEASE_TYPE, KERNEL_VERSION); info!("{} v{}", RELEASE_TYPE, VERSION);
info!( info!(
"Brand String: {}", "Brand String: {}",
master().unwrap().brand_string().unwrap() master().unwrap().brand_string().unwrap()

View file

@ -5,11 +5,10 @@ version = "0.2.0"
[dependencies] [dependencies]
linked_list_allocator = "0.9" linked_list_allocator = "0.9"
log = "0.4.14"
slab = { version = "0.4", default-features = false } slab = { version = "0.4", default-features = false }
spin = "0.9" spin = "0.9"
versioning = { git = "https://git.ablecorp.us/able/aos_userland" } versioning = { git = "https://git.ablecorp.us/able/aos_userland" }
tracing = { version = "0.1.37", default-features = false, features = ["attributes"] } tracing = { version = "0.1", default-features = false, features = ["attributes"] }
[dependencies.crossbeam-queue] [dependencies.crossbeam-queue]
version = "0.3" version = "0.3"

View file

@ -1,7 +1,5 @@
//! Memory allocator //! Memory allocator
use log::trace;
/// ///
pub const HEAP_START: usize = 0x_4444_4444_0000; pub const HEAP_START: usize = 0x_4444_4444_0000;
@ -16,7 +14,5 @@ pub const HEAP_SIZE: usize = HEAP_BASE * HEAP_MULTIPLIER;
#[alloc_error_handler] #[alloc_error_handler]
fn alloc_error_handler(layout: alloc::alloc::Layout) -> ! { fn alloc_error_handler(layout: alloc::alloc::Layout) -> ! {
trace!("allocation error: {:?}", layout);
loop {} loop {}
// panic!("allocation error: {:?}", layout)
} }

View file

@ -5,7 +5,7 @@ macro_rules! arch_cond {
#[cfg(target_arch = $str)] #[cfg(target_arch = $str)]
pub mod $arch; pub mod $arch;
#[cfg(target_arch = $str)] #[cfg(target_arch = $str)]
pub use ::$arch::*; pub use self::$arch::*;
)*}; )*};
} }

View file

@ -12,13 +12,10 @@ use crate::allocator::{HEAP_SIZE, HEAP_START};
static ALLOCATOR: LockedHeap = LockedHeap::empty(); static ALLOCATOR: LockedHeap = LockedHeap::empty();
pub unsafe fn init_alloc() -> Result<(), MapToError<Size4KiB>> { pub unsafe fn init_alloc() -> Result<(), MapToError<Size4KiB>> {
let page_range = { let page_range = Page::range_inclusive(
let heap_start = VirtAddr::new(HEAP_START as u64); Page::containing_address(VirtAddr::new(HEAP_START as u64)),
let heap_end = heap_start + HEAP_SIZE - 1u64; Page::containing_address(VirtAddr::new(HEAP_START as u64) + HEAP_SIZE - 1u64),
let heap_start_page = Page::containing_address(heap_start); );
let heap_end_page = Page::containing_address(heap_end);
Page::range_inclusive(heap_start_page, heap_end_page)
};
let mut frame_allocator = super::memory::FRAME_ALLOC let mut frame_allocator = super::memory::FRAME_ALLOC
.get() .get()

View file

@ -1,14 +1,23 @@
use limine::{LimineHhdmRequest, LimineMmapRequest}; use limine::{LimineHhdmRequest, LimineMmapRequest};
use spin::Mutex;
use uart_16550::SerialPort;
use x86_64::VirtAddr; use x86_64::VirtAddr;
mod allocator; mod allocator;
mod memory; mod memory;
static SERIAL_CONSOLE: Mutex<SerialPort> = Mutex::new(unsafe { SerialPort::new(0x3f8) });
#[no_mangle] #[no_mangle]
unsafe extern "C" fn _kernel_start() -> ! { unsafe extern "C" fn _kernel_start() -> ! {
static HDHM_REQ: LimineHhdmRequest = LimineHhdmRequest::new(0); static HDHM_REQ: LimineHhdmRequest = LimineHhdmRequest::new(0);
static MMAP_REQ: LimineMmapRequest = LimineMmapRequest::new(0); static MMAP_REQ: LimineMmapRequest = LimineMmapRequest::new(0);
let _ = serial_fmt(format_args!(
"Initialising AbleOS Kernel {}\r\n",
crate::VERSION
));
memory::init_pt(VirtAddr::new( memory::init_pt(VirtAddr::new(
HDHM_REQ HDHM_REQ
.get_response() .get_response()
@ -26,14 +35,13 @@ unsafe extern "C" fn _kernel_start() -> ! {
); );
allocator::init_alloc().expect("tried to initialise allocator"); allocator::init_alloc().expect("tried to initialise allocator");
SERIAL_CONSOLE.lock().init();
unsafe {
use uart_16550::SerialPort;
use core::fmt::Write;
let mut sp = SerialPort::new(0x3F8);
sp.init();
sp.write_str("Hello from AbleOS x86_64 entrypoint!");
}
crate::kmain::kmain() crate::kmain::kmain()
} }
/// Format args to serial console
pub fn serial_fmt(args: core::fmt::Arguments<'_>) -> core::fmt::Result {
use core::fmt::Write;
SERIAL_CONSOLE.lock().write_fmt(args)
}

1
kernel/src/debug.rs Normal file
View file

@ -0,0 +1 @@
// TODO: Tracing Subscriber serial print implementation

View file

@ -7,13 +7,14 @@ extern crate alloc;
pub mod allocator; pub mod allocator;
pub mod arch; pub mod arch;
pub mod debug;
pub mod kmain; pub mod kmain;
pub mod task; pub mod task;
use versioning::Version; use versioning::Version;
/// Kernel's version /// Kernel's version
pub const KERNEL_VERSION: Version = Version { pub const VERSION: Version = Version {
major: 0, major: 0,
minor: 2, minor: 2,
patch: 0, patch: 0,