• linux printk函数学习


    printk与printf的区别在于:
    printk运行在kernel space,而printf运行在user space。
    所以kernel打印log使用printk,而应用程序打印log使用printf。

    在printk.h中定义了8个级别的log level,
    #define KERN_EMERG "<0>"
    #define KERN_ALERT "<1>"
    #define KERN_CRIT "<2>"
    #define KERN_ERR "<3>"
    #define KERN_WARNING "<4>"
    #define KERN_NOTICE "<5>"
    #define KERN_INFO "<6>"
    #define KERN_DEBUG "<7>"

    通过如下命令,可以查看系统当前设定的printk log level。
    从结果中我们看到,系统当前设定的log level为0,所以不会
    打印任何log到console上。
    sh-# cat /proc/sys/kernel/printk
    0       4       1       7

    此时要查看系统打印的log的话,有两种方法:
    1. 使用dmesg命令将ring buffer中的内容保存起来;
    sh-# dmesg > /tmp_fs/dmesg.txt
    2. 将/proc/kmsg里面的内容保存起来
    sh-# cat /proc/kmsg > /tmp_fs/dmesg.txt
    有了上面这两种办法,再也不会因为一不小心没有保存控制台上的log而烦恼了。

    那printk level应该如何设定呢?这里有两种办法:
    1. 使用dmesg命令进行设定,
    sh-# cat /proc/sys/kernel/printk
    0       4       1       7
    sh-# dmesg -n 7
    sh-# cat /proc/sys/kernel/printk
    7       4       1       7
    2. 直接更改printk配置文件,
    sh-# echo 1 > /proc/sys/kernel/printk
    sh-# cat /proc/sys/kernel/printk
    1       4       1       7

    因为linux系统过程中会打印较多的系统log,所以一定要在系统启动前就设定好printk level。

    刚通过实验验证了,printk level只会影响到kernel log是否输出到控制台上;
    但是无论printk level如何,kernel log都会保存到ring buffer中。

    问题:
    将printk level设定为KERN_DEBUG,这样开机过程中会输出大量的log,
    会不会影响到系统开机性能呢?
    需要通过实验进行验证。

  • 相关阅读:
    用户交互语句
    基础数据类型补充与总结
    Python 中表示 False 的方法
    集合
    字典
    元组
    列表
    整型数据详述和进制转换
    f-strings 详解
    字符串方法详解
  • 原文地址:https://www.cnblogs.com/riskyer/p/3348020.html
Copyright © 2020-2023  润新知