diff --git a/src/framework/jinux-frame/Cargo.toml b/src/framework/jinux-frame/Cargo.toml index a19b1e2f9..9c9a8926c 100644 --- a/src/framework/jinux-frame/Cargo.toml +++ b/src/framework/jinux-frame/Cargo.toml @@ -19,6 +19,7 @@ pod = {path = "../pod"} pod-derive = {path = "../pod-derive"} acpi= "4.1.1" intrusive-collections = "0.9.5" +log= "0.4" [dependencies.lazy_static] version = "1.0" diff --git a/src/framework/jinux-frame/src/config.rs b/src/framework/jinux-frame/src/config.rs index ba3b4dcbe..275881480 100644 --- a/src/framework/jinux-frame/src/config.rs +++ b/src/framework/jinux-frame/src/config.rs @@ -1,6 +1,6 @@ #![allow(unused)] -use crate::log::LogLevel; +use log::Level; pub const USER_STACK_SIZE: usize = PAGE_SIZE * 4; pub const KERNEL_STACK_SIZE: usize = PAGE_SIZE * 64; @@ -15,6 +15,6 @@ pub const PAGE_SIZE_BITS: usize = 0xc; pub const KVA_START: usize = (usize::MAX) << PAGE_SIZE_BITS; -pub const DEFAULT_LOG_LEVEL: LogLevel = LogLevel::Error; +pub const DEFAULT_LOG_LEVEL: Level = Level::Error; /// This value represent the base timer frequency in Hz pub const TIMER_FREQ: u64 = 100; diff --git a/src/framework/jinux-frame/src/cpu.rs b/src/framework/jinux-frame/src/cpu.rs index af9d7c59e..4f7d4ad84 100644 --- a/src/framework/jinux-frame/src/cpu.rs +++ b/src/framework/jinux-frame/src/cpu.rs @@ -4,9 +4,9 @@ use core::arch::x86_64::{_fxrstor, _fxsave}; use core::fmt::Debug; use core::mem::MaybeUninit; -use crate::debug; use crate::trap::{CalleeRegs, CallerRegs, SyscallFrame, TrapFrame}; use crate::x86_64_util::rdfsbase; +use log::debug; use pod::Pod; /// Defines a CPU-local variable. diff --git a/src/framework/jinux-frame/src/device/serial.rs b/src/framework/jinux-frame/src/device/serial.rs index 47e9a2cd8..1ad06bdab 100644 --- a/src/framework/jinux-frame/src/device/serial.rs +++ b/src/framework/jinux-frame/src/device/serial.rs @@ -1,8 +1,9 @@ use alloc::{sync::Arc, vec::Vec}; use lazy_static::lazy_static; +use log::debug; use spin::Mutex; -use crate::{cell::Cell, debug, driver::pic, x86_64_util::*, IrqAllocateHandle, TrapFrame}; +use crate::{cell::Cell, driver::pic, x86_64_util::*, IrqAllocateHandle, TrapFrame}; use core::fmt::{self, Write}; bitflags::bitflags! { diff --git a/src/framework/jinux-frame/src/driver/acpi.rs b/src/framework/jinux-frame/src/driver/acpi.rs index d191d5d30..ef4be970e 100644 --- a/src/framework/jinux-frame/src/driver/acpi.rs +++ b/src/framework/jinux-frame/src/driver/acpi.rs @@ -1,8 +1,9 @@ use core::ptr::NonNull; -use crate::{info, mm::address::phys_to_virt}; +use crate::mm::address::phys_to_virt; use acpi::{AcpiHandler, AcpiTables}; use lazy_static::lazy_static; +use log::info; use spin::Mutex; lazy_static! { diff --git a/src/framework/jinux-frame/src/driver/apic.rs b/src/framework/jinux-frame/src/driver/apic.rs index d2ec5a8d4..0015a868f 100644 --- a/src/framework/jinux-frame/src/driver/apic.rs +++ b/src/framework/jinux-frame/src/driver/apic.rs @@ -1,5 +1,6 @@ -use crate::{cell::Cell, debug, x86_64_util}; +use crate::{cell::Cell, x86_64_util}; use lazy_static::lazy_static; +use log::debug; use volatile::{ access::{ReadOnly, ReadWrite, WriteOnly}, Volatile, diff --git a/src/framework/jinux-frame/src/driver/ioapic.rs b/src/framework/jinux-frame/src/driver/ioapic.rs index 49f030d34..7b8ce5820 100644 --- a/src/framework/jinux-frame/src/driver/ioapic.rs +++ b/src/framework/jinux-frame/src/driver/ioapic.rs @@ -1,8 +1,8 @@ use acpi::PlatformInfo; +use log::debug; use super::acpi::ACPI_TABLES; use crate::cell::Cell; -use crate::debug; use crate::mm::address::phys_to_virt; use crate::util::recycle_allocator::RecycleAllocator; use lazy_static::lazy_static; diff --git a/src/framework/jinux-frame/src/driver/mod.rs b/src/framework/jinux-frame/src/driver/mod.rs index aecf74e08..71d476fc1 100644 --- a/src/framework/jinux-frame/src/driver/mod.rs +++ b/src/framework/jinux-frame/src/driver/mod.rs @@ -10,11 +10,10 @@ pub mod rtc; pub mod timer; pub use apic::ack; +use log::info; pub use timer::TimerCallback; pub(crate) use timer::{add_timeout_list, TICK}; -use crate::info; - pub(crate) fn init(rsdp: Option) { acpi::init(rsdp.unwrap()); timer::init(); diff --git a/src/framework/jinux-frame/src/driver/pic.rs b/src/framework/jinux-frame/src/driver/pic.rs index 458932700..1fbf570f3 100644 --- a/src/framework/jinux-frame/src/driver/pic.rs +++ b/src/framework/jinux-frame/src/driver/pic.rs @@ -1,4 +1,4 @@ -use crate::{info, trap::allocate_target_irq, x86_64_util::out8, IrqAllocateHandle}; +use crate::{trap::allocate_target_irq, x86_64_util::out8, IrqAllocateHandle}; use core::sync::atomic::Ordering::Relaxed; use core::sync::atomic::{AtomicBool, AtomicU8}; @@ -12,6 +12,7 @@ const TIMER_IRQ_NUM: u8 = 32; use alloc::vec::Vec; use lazy_static::lazy_static; +use log::info; use spin::Mutex; lazy_static! { diff --git a/src/framework/jinux-frame/src/driver/timer/apic.rs b/src/framework/jinux-frame/src/driver/timer/apic.rs index b32bc0f09..714fe69fe 100644 --- a/src/framework/jinux-frame/src/driver/timer/apic.rs +++ b/src/framework/jinux-frame/src/driver/timer/apic.rs @@ -1,7 +1,9 @@ +use log::info; + use crate::{ config, driver::{apic::APIC_INSTANCE, pic, timer}, - info, x86_64_util, TrapFrame, + x86_64_util, TrapFrame, }; pub fn init() { diff --git a/src/framework/jinux-frame/src/lib.rs b/src/framework/jinux-frame/src/lib.rs index 41d157ea0..b93849a19 100644 --- a/src/framework/jinux-frame/src/lib.rs +++ b/src/framework/jinux-frame/src/lib.rs @@ -18,7 +18,7 @@ pub mod cpu; pub mod device; mod driver; mod error; -pub mod log; +pub mod logger; pub(crate) mod mm; pub mod prelude; pub mod sync; @@ -56,8 +56,7 @@ pub use x86_64::registers::rflags::RFlags; use x86_64_util::enable_common_cpu_features; static mut IRQ_CALLBACK_LIST: Vec = Vec::new(); -// TODO: serial中断 -// 讨论syscall的中断启用 + #[cfg(not(feature = "serial_print"))] pub use crate::screen_print as print; #[cfg(not(feature = "serial_print"))] @@ -69,6 +68,7 @@ pub use crate::console_print as print; pub use crate::console_println as println; pub fn init(boot_info: &'static mut BootInfo) { + logger::init(); let siz = boot_info.framebuffer.as_ref().unwrap() as *const FrameBuffer as usize; let mut memory_init = false; // memory diff --git a/src/framework/jinux-frame/src/log.rs b/src/framework/jinux-frame/src/log.rs deleted file mode 100644 index df435d9b3..000000000 --- a/src/framework/jinux-frame/src/log.rs +++ /dev/null @@ -1,134 +0,0 @@ -use core::fmt::Arguments; - -use crate::config::DEFAULT_LOG_LEVEL; - -/// Print log message -/// This function should *NOT* be directly called. -/// Instead, print logs with macros. -#[cfg(not(feature = "serial_print"))] -#[doc(hidden)] -pub fn log_print(args: Arguments) { - use crate::device::framebuffer::WRITER; - use core::fmt::Write; - use x86_64::instructions::interrupts; - - interrupts::without_interrupts(|| { - WRITER.lock().as_mut().unwrap().write_fmt(args).unwrap(); - }); -} - -/// Print log message -/// This function should *NOT* be directly called. -/// Instead, print logs with macros. -#[cfg(feature = "serial_print")] -#[doc(hidden)] -pub fn log_print(args: Arguments) { - crate::device::serial::print(args); -} - -/// This macro should not be directly called. -#[macro_export] -macro_rules! log_print { - ($($arg:tt)*) => { - $crate::log::log_print(format_args!($($arg)*)) - }; -} - -#[macro_export] -macro_rules! trace { - ($($arg:tt)*) => { - if $crate::log::Logger::trace() { - $crate::log_print!("[trace]:"); - $crate::log_print!($($arg)*); - $crate::log_print!("\n"); - } - }; -} - -#[macro_export] -macro_rules! debug { - ($($arg:tt)*) => { - if $crate::log::Logger::debug() { - $crate::log_print!("[debug]:"); - $crate::log_print!($($arg)*); - $crate::log_print!("\n"); - } - }; -} - -#[macro_export] -macro_rules! info { - ($($arg:tt)*) => { - if $crate::log::Logger::info() { - ($crate::log_print!("[info]:")); - ($crate::log_print!($($arg)*)); - ($crate::log_print!("\n")); - } - }; -} - -#[macro_export] -macro_rules! warn { - ($($arg:tt)*) => { - if $crate::log::Logger::warn() { - $crate::log_print!("[warn]:"); - $crate::log_print!($($arg)*); - $crate::log_print!("\n"); - } - }; -} - -#[macro_export] -macro_rules! error { - ($($arg:tt)*) => { - if $crate::log::Logger::error() { - $crate::log_print!("[error]:"); - $crate::log_print!($($arg)*); - $crate::log_print!("\n"); - } - }; -} - -pub const LOGGER: Logger = Logger::default_log_level(); - -pub struct Logger { - log_level: LogLevel, -} - -impl Logger { - pub const fn default_log_level() -> Logger { - Logger { - log_level: DEFAULT_LOG_LEVEL, - } - } - - pub fn trace() -> bool { - LOGGER.log_level <= LogLevel::Trace - } - - pub fn debug() -> bool { - LOGGER.log_level <= LogLevel::Debug - } - - pub fn info() -> bool { - LOGGER.log_level <= LogLevel::Info - } - - pub fn warn() -> bool { - LOGGER.log_level <= LogLevel::Warn - } - - pub fn error() -> bool { - LOGGER.log_level <= LogLevel::Error - } -} - -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)] -pub enum LogLevel { - Trace, - Debug, - Info, - Warn, - Error, - Close, -} diff --git a/src/framework/jinux-frame/src/logger.rs b/src/framework/jinux-frame/src/logger.rs new file mode 100644 index 000000000..e4cd04aa1 --- /dev/null +++ b/src/framework/jinux-frame/src/logger.rs @@ -0,0 +1,27 @@ +use crate::{config::DEFAULT_LOG_LEVEL, println}; + +use log::{Metadata, Record}; + +const LOGGER: Logger = Logger {}; + +struct Logger {} + +impl log::Log for Logger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= DEFAULT_LOG_LEVEL + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + println!("[{}]: {}", record.level(), record.args()); + } + } + + fn flush(&self) {} +} + +pub(crate) fn init() { + log::set_logger(&LOGGER) + .map(|()| log::set_max_level(DEFAULT_LOG_LEVEL.to_level_filter())) + .unwrap(); +} diff --git a/src/framework/jinux-frame/src/mm/page_table.rs b/src/framework/jinux-frame/src/mm/page_table.rs index c70e88717..cd41772a1 100644 --- a/src/framework/jinux-frame/src/mm/page_table.rs +++ b/src/framework/jinux-frame/src/mm/page_table.rs @@ -4,6 +4,7 @@ use crate::{ vm::VmFrame, *, }; +use ::log::info; use alloc::{collections::BTreeMap, vec, vec::Vec}; use core::{fmt, panic}; use lazy_static::lazy_static; diff --git a/src/framework/jinux-frame/src/prelude.rs b/src/framework/jinux-frame/src/prelude.rs index 6048dae69..9db7ab2f5 100644 --- a/src/framework/jinux-frame/src/prelude.rs +++ b/src/framework/jinux-frame/src/prelude.rs @@ -7,6 +7,5 @@ pub(crate) use alloc::sync::Arc; pub(crate) use alloc::vec::Vec; pub(crate) use core::any::Any; -pub use crate::debug; pub(crate) use crate::util::AlignExt; pub use crate::vm::{Paddr, Vaddr}; diff --git a/src/framework/jinux-frame/src/task/mod.rs b/src/framework/jinux-frame/src/task/mod.rs index fbfd8b221..faad1c484 100644 --- a/src/framework/jinux-frame/src/task/mod.rs +++ b/src/framework/jinux-frame/src/task/mod.rs @@ -11,4 +11,4 @@ pub use self::scheduler::{set_scheduler, Scheduler}; pub(crate) use self::task::context_switch; pub(crate) use self::task::TaskContext; pub(crate) use self::task::SWITCH_TO_USER_SPACE_TASK; -pub use self::task::{Task, TaskStatus, TaskAdapter}; +pub use self::task::{Task, TaskAdapter, TaskStatus}; diff --git a/src/framework/jinux-frame/src/user.rs b/src/framework/jinux-frame/src/user.rs index 27d4ebec2..408771fc4 100644 --- a/src/framework/jinux-frame/src/user.rs +++ b/src/framework/jinux-frame/src/user.rs @@ -1,7 +1,7 @@ //! User space. -use crate::debug; use crate::x86_64_util::{rdfsbase, wrfsbase}; +use log::debug; use x86_64::registers::rflags::RFlags; use crate::cpu::CpuContext; diff --git a/src/services/comps/jinux-pci/Cargo.toml b/src/services/comps/jinux-pci/Cargo.toml index dff4cd5fe..ad2845a1a 100644 --- a/src/services/comps/jinux-pci/Cargo.toml +++ b/src/services/comps/jinux-pci/Cargo.toml @@ -12,6 +12,7 @@ jinux-frame = {path = "../../../framework/jinux-frame"} jinux-util = {path="../../libs/jinux-util"} pod = {path = "../../../framework/pod"} pod-derive = {path = "../../../framework/pod-derive"} +log= "0.4" [dependencies.lazy_static] version = "1.0" diff --git a/src/services/comps/jinux-pci/src/lib.rs b/src/services/comps/jinux-pci/src/lib.rs index e25970e13..1d3e16fd7 100644 --- a/src/services/comps/jinux-pci/src/lib.rs +++ b/src/services/comps/jinux-pci/src/lib.rs @@ -6,11 +6,11 @@ pub mod capability; pub mod msix; pub mod util; extern crate alloc; -use jinux_frame::info; extern crate pod_derive; use alloc::{sync::Arc, vec::Vec}; use lazy_static::lazy_static; +use log::info; use spin::mutex::Mutex; use util::CSpaceAccessMethod; diff --git a/src/services/comps/jinux-pci/src/msix.rs b/src/services/comps/jinux-pci/src/msix.rs index 0d08a8ef1..3f6e4701a 100644 --- a/src/services/comps/jinux-pci/src/msix.rs +++ b/src/services/comps/jinux-pci/src/msix.rs @@ -1,11 +1,12 @@ use alloc::vec::Vec; +use log::debug; use pod_derive::Pod; use crate::util::{CSpaceAccessMethod, Location, BAR}; use super::capability::msix::CapabilityMSIXData; -use jinux_frame::{debug, offset_of, IrqAllocateHandle}; +use jinux_frame::{offset_of, IrqAllocateHandle}; use jinux_util::frame_ptr::InFramePtr; #[derive(Debug, Default)] diff --git a/src/services/comps/jinux-virtio/Cargo.toml b/src/services/comps/jinux-virtio/Cargo.toml index 07da9189a..d5aae8136 100644 --- a/src/services/comps/jinux-virtio/Cargo.toml +++ b/src/services/comps/jinux-virtio/Cargo.toml @@ -13,6 +13,7 @@ jinux-pci = {path="../jinux-pci"} jinux-util = {path="../../libs/jinux-util"} pod = {path = "../../../framework/pod"} pod-derive = {path = "../../../framework/pod-derive"} +log= "0.4" [features] diff --git a/src/services/comps/jinux-virtio/src/lib.rs b/src/services/comps/jinux-virtio/src/lib.rs index fe0b1bb61..6a5bd0743 100644 --- a/src/services/comps/jinux-virtio/src/lib.rs +++ b/src/services/comps/jinux-virtio/src/lib.rs @@ -8,9 +8,10 @@ extern crate alloc; use alloc::{sync::Arc, vec::Vec}; use bitflags::bitflags; use device::VirtioDevice; -use jinux_frame::{debug, info, offset_of, TrapFrame}; +use jinux_frame::{offset_of, TrapFrame}; use jinux_pci::util::{PCIDevice, BAR}; use jinux_util::frame_ptr::InFramePtr; +use log::{debug, info}; use pod_derive::Pod; use crate::device::VirtioInfo; diff --git a/src/services/libs/jinux-std/Cargo.toml b/src/services/libs/jinux-std/Cargo.toml index b8d043aed..603105957 100644 --- a/src/services/libs/jinux-std/Cargo.toml +++ b/src/services/libs/jinux-std/Cargo.toml @@ -30,6 +30,7 @@ ringbuffer = "0.10.0" spin = "0.9.4" vte = "0.10" lru = "0.9.0" +log= "0.4" [dependencies.lazy_static] version = "1.0" diff --git a/src/services/libs/jinux-std/src/driver/pci/mod.rs b/src/services/libs/jinux-std/src/driver/pci/mod.rs index b1314a9be..8ae60b33a 100644 --- a/src/services/libs/jinux-std/src/driver/pci/mod.rs +++ b/src/services/libs/jinux-std/src/driver/pci/mod.rs @@ -1,5 +1,6 @@ +use log::info; + pub mod virtio; -use jinux_frame::info; pub fn init() { jinux_pci::init(); diff --git a/src/services/libs/jinux-std/src/driver/pci/virtio/block.rs b/src/services/libs/jinux-std/src/driver/pci/virtio/block.rs index 4cda9d4d0..4bcaf0ac0 100644 --- a/src/services/libs/jinux-std/src/driver/pci/virtio/block.rs +++ b/src/services/libs/jinux-std/src/driver/pci/virtio/block.rs @@ -1,6 +1,5 @@ use crate::process::Process; use alloc::sync::Arc; -use jinux_frame::info; use jinux_pci::msix::MSIX; use jinux_pci::PCIDevice; use jinux_util::frame_ptr::InFramePtr; @@ -9,6 +8,7 @@ use jinux_virtio::device::block::BlkResp; use jinux_virtio::PCIVirtioDevice; use jinux_virtio::VitrioPciCommonCfg; use lazy_static::lazy_static; +use log::info; use spin::mutex::Mutex; use super::BlockDevice; diff --git a/src/services/libs/jinux-std/src/driver/pci/virtio/input.rs b/src/services/libs/jinux-std/src/driver/pci/virtio/input.rs index 0336830d7..00d495831 100644 --- a/src/services/libs/jinux-std/src/driver/pci/virtio/input.rs +++ b/src/services/libs/jinux-std/src/driver/pci/virtio/input.rs @@ -3,7 +3,7 @@ use core::sync::atomic::AtomicBool; use alloc::collections::BTreeMap; use alloc::{string::String, sync::Arc, vec::Vec}; -use jinux_frame::{debug, info, offset_of, TrapFrame}; +use jinux_frame::{offset_of, TrapFrame}; use jinux_pci::{msix::MSIX, PCIDevice}; use jinux_util::frame_ptr::InFramePtr; use jinux_virtio::device::input::device::InputProp; @@ -13,6 +13,7 @@ use jinux_virtio::{ PCIVirtioDevice, }; use lazy_static::lazy_static; +use log::{debug, info}; use spin::Mutex; use virtio_input_decoder::{DecodeType, Decoder}; diff --git a/src/services/libs/jinux-std/src/prelude.rs b/src/services/libs/jinux-std/src/prelude.rs index 3c3e3c7ea..91c9eb496 100644 --- a/src/services/libs/jinux-std/src/prelude.rs +++ b/src/services/libs/jinux-std/src/prelude.rs @@ -14,7 +14,8 @@ pub(crate) use bitflags::bitflags; pub(crate) use core::ffi::CStr; pub(crate) use jinux_frame::config::PAGE_SIZE; pub(crate) use jinux_frame::vm::Vaddr; -pub(crate) use jinux_frame::{debug, error, info, print, println, trace, warn}; +pub(crate) use jinux_frame::{print, println}; +pub(crate) use log::{debug, error, info, trace, warn}; pub(crate) use spin::{Mutex, RwLock}; /// return current process diff --git a/src/services/libs/jinux-std/src/process/signal/sig_action.rs b/src/services/libs/jinux-std/src/process/signal/sig_action.rs index ef4d94cbc..b036aba45 100644 --- a/src/services/libs/jinux-std/src/process/signal/sig_action.rs +++ b/src/services/libs/jinux-std/src/process/signal/sig_action.rs @@ -1,7 +1,6 @@ use super::{c_types::sigaction_t, constants::*, sig_mask::SigMask, sig_num::SigNum}; use crate::prelude::*; use bitflags::bitflags; -use jinux_frame::warn; #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum SigAction {