diff --git a/src/main.rs b/src/main.rs index a29ae8d0..59575a1f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,6 @@ mod macros; #[cfg(target_os = "none")] mod allocator; mod arch; -mod console; #[cfg(target_os = "none")] mod log; mod os; @@ -26,5 +25,5 @@ extern crate alloc; fn _print(args: core::fmt::Arguments<'_>) { use core::fmt::Write; - console::CONSOLE.lock().write_fmt(args).unwrap(); + self::os::CONSOLE.lock().write_fmt(args).unwrap(); } diff --git a/src/os/none/console.rs b/src/os/none/console.rs new file mode 100644 index 00000000..a1f0fd8f --- /dev/null +++ b/src/os/none/console.rs @@ -0,0 +1,14 @@ +use core::fmt; + +use one_shot_mutex::OneShotMutex; + +pub struct Console(()); + +impl fmt::Write for Console { + fn write_str(&mut self, s: &str) -> fmt::Result { + crate::arch::write_to_console(s.as_bytes()); + Ok(()) + } +} + +pub static CONSOLE: OneShotMutex = OneShotMutex::new(Console(())); diff --git a/src/os/none.rs b/src/os/none/mod.rs similarity index 90% rename from src/os/none.rs rename to src/os/none/mod.rs index 405e45ac..81b7caee 100644 --- a/src/os/none.rs +++ b/src/os/none/mod.rs @@ -1,3 +1,4 @@ +mod console; use core::fmt::Write; use core::mem::MaybeUninit; use core::slice; @@ -5,7 +6,8 @@ use core::slice; use hermit_entry::elf::KernelObject; use log::info; -use crate::{arch, console}; +pub use self::console::CONSOLE; +use crate::arch; extern "C" { static kernel_end: u8; @@ -44,7 +46,7 @@ pub(crate) unsafe extern "C" fn loader_main() -> ! { #[panic_handler] fn panic(info: &core::panic::PanicInfo<'_>) -> ! { // We can't use `println!` or related macros, because `_print` unwraps a result and might panic again - writeln!(console::CONSOLE.lock(), "[LOADER] {info}").ok(); + writeln!(crate::os::CONSOLE.lock(), "[LOADER] {info}").ok(); loop {} } diff --git a/src/console.rs b/src/os/uefi/console.rs similarity index 74% rename from src/console.rs rename to src/os/uefi/console.rs index 1ac2edb3..cf159fa6 100644 --- a/src/console.rs +++ b/src/os/uefi/console.rs @@ -6,9 +6,6 @@ pub struct Console(()); impl fmt::Write for Console { fn write_str(&mut self, s: &str) -> fmt::Result { - #[cfg(target_os = "none")] - crate::arch::write_to_console(s.as_bytes()); - #[cfg(target_os = "uefi")] uefi_services::system_table().stdout().write_str(s)?; Ok(()) } diff --git a/src/os/uefi.rs b/src/os/uefi/mod.rs similarity index 95% rename from src/os/uefi.rs rename to src/os/uefi/mod.rs index 3daa60f3..377ffc7a 100644 --- a/src/os/uefi.rs +++ b/src/os/uefi/mod.rs @@ -1,3 +1,4 @@ +mod console; use alloc::string::String; use alloc::vec::Vec; @@ -5,6 +6,8 @@ use qemu_exit::QEMUExit; use uefi::fs::{FileSystem, Path}; use uefi::prelude::*; +pub use self::console::CONSOLE; + fn read_app(bt: &BootServices) -> Vec { let fs = bt .get_image_file_system(bt.image_handle())