usermode
ondra05 2022-12-08 00:07:02 +01:00
parent cd5b7a8e69
commit 39cafcaed4
6 changed files with 39 additions and 9 deletions

2
Cargo.lock generated
View File

@ -585,9 +585,9 @@ dependencies = [
"crossbeam-queue",
"limine",
"linked_list_allocator",
"log",
"slab",
"spin 0.9.4",
"tracing",
"uart_16550",
"versioning",
"x86_64",

View File

@ -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"

View File

@ -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()
}

View File

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

View File

@ -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;

33
kernel/src/logger.rs Normal file
View File

@ -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) {}
}