#logger #no-std #logging #frame-buffer

无需std库 printk

一个独立的、#![no_std]-友好的 Logger

19个版本

0.3.2 2022年12月16日
0.3.1 2022年12月10日
0.3.0-beta2022年11月15日
0.2.5 2022年3月30日
0.1.8 2022年2月6日

#8 in #frame-buffer

MIT 许可协议

7.5MB
390 代码行

包含 (WOFF字体, 680KB) doc/NanumBarunGothic.ttf.woff, (WOFF字体, 400KB) doc/NanumBarunGothic.ttf.woff2, (WOFF字体, 190KB) doc/FiraSans-Medium.woff, (WOFF字体, 135KB) doc/FiraSans-Medium.woff2, (WOFF字体, 185KB) doc/FiraSans-Regular.woff, (WOFF字体, 130KB) doc/FiraSans-Regular.woff2 和 12 个更多.

一个独立的、#![no_std]-友好的 Logger 包。基于引导加载程序包中内置的日志器设计,旨在用于操作系统内核。

要使用此包,请在您的内核的Cargo.toml中将它指定为依赖项,然后初始化它。

初始化

为了使用日志器,需要对其进行初始化。为此,必须首先创建一个全局实例,可以使用类似conquer_once的包。

pub static PRINTK: OnceCell<LockedPrintk> = OnceCell::uninit();

之后,需要将log包附加到它。这需要以下3个步骤:

  1. 使用get_or_init方法从外部的OnceCell中解包LockedPrintk对象。
  2. 使用log::set_logger告诉log包要附加什么。
  3. 使用log::set_max_level告诉log包你想要多少个日志级别。

以下是一个示例函数,演示了如何在纯Rust中完成这个过程。

pub fn printk_init(buffer: &'static mut [u8], info: FrameBufferInfo) {
    let kernel_logger = printk::PRINTK.get_or_init(move || printk::LockedPrintk::new(buffer, info));
    log::set_logger(kernel_logger).expect("logger already set");
    log::set_max_level(log::LevelFilter::Trace);
    log::info!("Hello, Kernel!");
}

贡献

如果您要添加任何功能,请随意创建一个pull request。我会很高兴测试并接受它。如果您有任何错误需要报告,GitHub就是为了这个。如果您是加利福尼亚州使命维尤地区的雇主,请随意在Indeed上联系我。我在那里设置了推送通知,所以您通过Indeed发送的任何消息都一定会被看到。

示例输出

Example kernel

依赖项