kernel: logging

This commit is contained in:
janis 2026-08-03 18:47:12 +02:00
parent 723063d31e
commit 8f441135e0
Signed by: janis
SSH key fingerprint: SHA256:bB1qbbqmDXZNT0KKD5c2Dfjg53JGhj7B3CFcLIzSqq8
5 changed files with 35 additions and 2 deletions

7
Cargo.lock generated
View file

@ -20,12 +20,19 @@ version = "0.1.0"
dependencies = [
"bit_field",
"bitflags",
"log",
"plain",
"rbtree",
"rustc-demangle",
"seq-macro",
]
[[package]]
name = "log"
version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "plain"
version = "0.2.3"

View file

@ -24,6 +24,7 @@ harness = false
[dependencies]
bit_field = "0.10.3"
bitflags = "2.13.1"
log = { version = "0.4", default-features = false }
seq-macro = "0.3.6"
rbtree = { path = "../crates/rbtree" }

View file

@ -19,6 +19,7 @@ extern crate alloc;
pub mod bits;
pub mod limine;
pub mod logger;
pub mod serial;
pub mod sync;
pub mod x86_64;

25
kernel/src/logger.rs Normal file
View file

@ -0,0 +1,25 @@
use log::{LevelFilter, Log, Metadata, Record};
use crate::serial_println;
pub struct SerialLogger;
impl Log for SerialLogger {
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
metadata.level() <= log::max_level()
}
fn log(&self, record: &Record<'_>) {
if self.enabled(record.metadata()) {
serial_println!("[{:}] {}", record.level(), record.args());
}
}
fn flush(&self) {}
}
pub fn init(max_level: LevelFilter) {
static LOGGER: SerialLogger = SerialLogger;
log::set_logger(&LOGGER).expect("logger already initialized");
log::set_max_level(max_level);
}

View file

@ -22,7 +22,7 @@ static GDT: LazyLock<GlobalDescriptorTable> = LazyLock::new(GlobalDescriptorTabl
/// Entry point for the kernel
#[unsafe(no_mangle)]
extern "C" fn _start() -> ! {
kernel::serial_println!("Hello, world!");
kernel::logger::init(log::LevelFilter::Trace);
assert!(limine_requests::LIMINE_BASE_REVISION.is_supported());
_ = kernel::memory::HHDM_BASE
@ -56,7 +56,6 @@ extern "C" fn _start() -> ! {
GDT.load();
IDT.load();
unsafe { (0 as *mut u8).write_volatile(0x42) };
kernel::serial_println!("entry point: 0x{:x}", _start as *const () as usize);
kernel::serial_println!(