kernel: logging
This commit is contained in:
parent
723063d31e
commit
8f441135e0
7
Cargo.lock
generated
7
Cargo.lock
generated
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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" }
|
||||||
|
|
|
||||||
|
|
@ -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
25
kernel/src/logger.rs
Normal 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);
|
||||||
|
}
|
||||||
|
|
@ -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!(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue