Browse Source

Implement a `log` backend which writes to the VGA console

master
3moon 8 years ago
parent
commit
48ca218dd0
4 changed files with 41 additions and 0 deletions
  1. +6
    -0
      Cargo.lock
  2. +3
    -0
      Cargo.toml
  3. +4
    -0
      src/lib.rs
  4. +28
    -0
      src/logger.rs

+ 6
- 0
Cargo.lock View File

@ -2,6 +2,7 @@
name = "sparkle_os"
version = "0.1.0"
dependencies = [
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rlibc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"spin 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"volatile 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
@ -33,6 +34,10 @@ version = "0.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "log"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
name = "num"
version = "0.1.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
@ -208,6 +213,7 @@ dependencies = [
"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"
"checksum csv 0.14.7 (registry+https://github.com/rust-lang/crates.io-index)" = "266c1815d7ca63a5bd86284043faf91e8c95e943e55ce05dc0ae08e952de18bc"
"checksum libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "e7eb6b826bfc1fdea7935d46556250d1799b7fe2d9f7951071f4291710665e3e"
"checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"
"checksum num 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "98b15ba84e910ea7a1973bccd3df7b31ae282bf9d8bd2897779950c9b8303d40"
"checksum num-bigint 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "ba6d838b16e56da1b6c383d065ff1ec3c7d7797f65a3e8f6ba7092fd87820bac"
"checksum num-complex 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "148eb324ca772230853418731ffdf13531738b50f89b30692a01fcdcb0a64677"


+ 3
- 0
Cargo.toml View File

@ -11,3 +11,6 @@ rlibc = "1.0"
spin = "0.4.5"
volatile = "0.2"
x86 = "0.8"
[dependencies.log]
version = "0.3"
default-features = false

+ 4
- 0
src/lib.rs View File

@ -4,6 +4,8 @@
#![feature(lang_items)]
#![no_std]
#[macro_use]
extern crate log;
extern crate rlibc;
extern crate spin;
extern crate volatile;
@ -12,6 +14,7 @@ mod arch;
#[macro_use]
mod macros;
mod misc;
mod logger;
use arch::x86_64::device::vga_console;
@ -25,6 +28,7 @@ pub extern fn kernel_main() {
vga_console::WRITER.lock().clear_screen();
println!("--- Sparkle v{} booting! ---", ::misc::VERSION);
logger::init().expect("Logger failed to launch!");
loop {}


+ 28
- 0
src/logger.rs View File

@ -0,0 +1,28 @@
//! A basic console logging backend for the `log` crate.
use log;
use log::{Log, LogRecord, LogLevel, LogLevelFilter, LogMetadata};
use log::{SetLoggerError};
pub fn init() -> Result<(), SetLoggerError> {
unsafe {
log::set_logger_raw(|max_log_level| {
static LOGGER: ConsoleLogger = ConsoleLogger;
max_log_level.set(LogLevelFilter::Info);
&ConsoleLogger
})
}
}
struct ConsoleLogger;
impl Log for ConsoleLogger {
fn enabled(&self, metadata: &LogMetadata) -> bool {
metadata.level() <= LogLevel::Info
}
fn log(&self, record: &LogRecord) {
if self.enabled(record.metadata()) {
println!("{} - {}", record.level(), record.args());
}
}
}

Loading…
Cancel
Save