diff --git a/Cargo.lock b/Cargo.lock index c423b49..3a8d5b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -585,9 +585,9 @@ dependencies = [ "crossbeam-queue", "limine", "linked_list_allocator", + "log", "slab", "spin 0.9.4", - "tracing", "uart_16550", "versioning", "x86_64", diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 33baa99..2a111c8 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -8,7 +8,7 @@ linked_list_allocator = "0.9" slab = { version = "0.4", default-features = false } spin = "0.9" versioning = { git = "https://git.ablecorp.us/able/aos_userland" } -tracing = { version = "0.1", default-features = false, features = ["attributes"] } +log = "0.4" [dependencies.crossbeam-queue] version = "0.3" diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs index 222af1d..60b567f 100644 --- a/kernel/src/arch/x86_64/mod.rs +++ b/kernel/src/arch/x86_64/mod.rs @@ -13,10 +13,9 @@ unsafe extern "C" fn _kernel_start() -> ! { static HDHM_REQ: LimineHhdmRequest = LimineHhdmRequest::new(0); static MMAP_REQ: LimineMmapRequest = LimineMmapRequest::new(0); - let _ = serial_fmt(format_args!( - "Initialising AbleOS Kernel {}\r\n", - crate::VERSION - )); + SERIAL_CONSOLE.lock().init(); + crate::logger::init().expect("failed to set logger"); + log::info!("Initialising AKern {}", crate::VERSION); memory::init_pt(VirtAddr::new( HDHM_REQ @@ -35,7 +34,6 @@ unsafe extern "C" fn _kernel_start() -> ! { ); allocator::init_alloc().expect("tried to initialise allocator"); - SERIAL_CONSOLE.lock().init(); crate::kmain::kmain() } diff --git a/kernel/src/debug.rs b/kernel/src/debug.rs deleted file mode 100644 index 981558f..0000000 --- a/kernel/src/debug.rs +++ /dev/null @@ -1 +0,0 @@ -// TODO: Tracing Subscriber serial print implementation diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index a96c0cc..6b17431 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -7,7 +7,7 @@ extern crate alloc; pub mod allocator; pub mod arch; -pub mod debug; +pub mod logger; pub mod kmain; pub mod task; diff --git a/kernel/src/logger.rs b/kernel/src/logger.rs new file mode 100644 index 0000000..cc894eb --- /dev/null +++ b/kernel/src/logger.rs @@ -0,0 +1,33 @@ +use log::{Level, SetLoggerError}; + +pub fn init() -> Result<(), SetLoggerError> { + log::set_logger(&crate::logger::Logger)?; + log::set_max_level(log::LevelFilter::Trace); + Ok(()) +} + +struct Logger; +impl log::Log for Logger { + fn enabled(&self, metadata: &log::Metadata) -> bool { + true + } + + fn log(&self, record: &log::Record) { + let lvl = record.level(); + crate::arch::serial_fmt(format_args!( + "\x1b[38;5;{}m{lvl}\x1b[0m [{}]: {}\r\n", + match lvl { + Level::Error => "160", + Level::Warn => "172", + Level::Info => "47", + Level::Debug => "25", + Level::Trace => "103", + }, + record.module_path().unwrap_or_default(), + record.args(), + )) + .expect("write to serial console"); + } + + fn flush(&self) {} +}