feat: Add serial logging (#3)

Reviewed-on: #3
This commit is contained in:
2025-07-22 19:17:20 +02:00
parent d8159a373e
commit 4bd1e3bc6a
6 changed files with 111 additions and 9 deletions

View File

@@ -11,6 +11,7 @@ static LOGGER: OnceCell<LockedLogger> = OnceCell::uninit();
/// A logger instance protected by a spinlock.
struct LockedLogger {
framebuffer: Option<Spinlock<framebuffer::FrameBufferWriter>>,
serial: Option<Spinlock<serial::SerialPort>>
}
impl LockedLogger {
@@ -20,9 +21,11 @@ impl LockedLogger {
info: FrameBufferInfo,
) -> Self {
let framebuffer = Some(Spinlock::new(framebuffer::FrameBufferWriter::new(framebuffer, info)));
let serial = Some(Spinlock::new(unsafe { serial::SerialPort::init() }));
LockedLogger {
framebuffer,
serial
}
}
@@ -34,6 +37,10 @@ impl LockedLogger {
if let Some(framebuffer) = &self.framebuffer {
unsafe { framebuffer.force_unlock() };
}
if let Some(serial) = &self.serial {
unsafe { serial.force_unlock() };
}
}
}
@@ -47,6 +54,11 @@ impl log::Log for LockedLogger {
let mut framebuffer = framebuffer.lock();
writeln!(framebuffer, "{:5}: {}", record.level(), record.args()).unwrap();
}
if let Some(serial) = &self.serial {
let mut serial = serial.lock();
writeln!(serial, "{:5}: {}", record.level(), record.args()).unwrap();
}
}
fn flush(&self) {}