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 = [ dependencies = [
"bit_field", "bit_field",
"bitflags", "bitflags",
"log",
"plain", "plain",
"rbtree", "rbtree",
"rustc-demangle", "rustc-demangle",
"seq-macro", "seq-macro",
] ]
[[package]]
name = "log"
version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]] [[package]]
name = "plain" name = "plain"
version = "0.2.3" version = "0.2.3"

View file

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

View file

@ -19,6 +19,7 @@ extern crate alloc;
pub mod bits; pub mod bits;
pub mod limine; pub mod limine;
pub mod logger;
pub mod serial; pub mod serial;
pub mod sync; pub mod sync;
pub mod x86_64; 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 /// Entry point for the kernel
#[unsafe(no_mangle)] #[unsafe(no_mangle)]
extern "C" fn _start() -> ! { extern "C" fn _start() -> ! {
kernel::serial_println!("Hello, world!"); kernel::logger::init(log::LevelFilter::Trace);
assert!(limine_requests::LIMINE_BASE_REVISION.is_supported()); assert!(limine_requests::LIMINE_BASE_REVISION.is_supported());
_ = kernel::memory::HHDM_BASE _ = kernel::memory::HHDM_BASE
@ -56,7 +56,6 @@ extern "C" fn _start() -> ! {
GDT.load(); GDT.load();
IDT.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!("entry point: 0x{:x}", _start as *const () as usize);
kernel::serial_println!( kernel::serial_println!(