Linux内核 printk知多少

来源:互联网 发布:淘宝游戏账号出售 编辑:程序博客网 时间:2024/05/17 01:54

linux内核中的 "printk"看似简单其实不然,但是我们在平时开发,完成功能阶段也没有必要了解的特别细致,如果想更深入的学习,我转载的另一片博文:http://blog.csdn.net/linux_rookie/article/details/71908317

一、printk打印级别:

print顾名思义打印信息,承担的对外显示以及内核调试功能,熟悉应用的开发的朋友对“printf”太有感情了。一直充当Debug大法中的那个又笨又有用的角色。有的人用了很多年却也仅仅是用来打印简单的信息,其实printf也是一个博大精深的函数,有精力的朋友可以自行查阅,今后有精力一定整理一片博文出来。今天我们的主角是Linux内核printk。

我们可以以内核源码为线索这里给出索引:

在Kernel.h (include\linux) 中可以发现


#define KERN_EMERG"<0>"/* system is unusable系统不可使用*/
#define KERN_ALERT"<1>"/* action must be taken immediately需要立即采取行动*/
#define KERN_CRIT"<2>"/* critical conditions严重情况*/
#define KERN_ERR"<3>"/* error conditions错误情况*/
#define KERN_WARNING"<4>"/* warning conditions警告情况*/
#define KERN_NOTICE"<5>"/* normal but significant condition正常情况, 但是值得注意*/
#define KERN_INFO"<6>"/* informational信息型消息*/
#define KERN_DEBUG"<7>"/* debug-level messages调试级别的信息*/

  1. 有的时候我们也会在内核中看到没有填写打印机别的printk那么这时内核会选用DEFAULT_MESSAGE_LOGLEVEL,这个定义位于kernel/printk.c:


  2. 二、怎么用
  3.     我们最初使用printk的时候第一个目的就是输出打印信息,以此来帮助我们调试。当你还想挖掘其它功能时你已经是牛人了,此贴对你无用。
  4.    通过上面的内容我们知道默认的打印级别是“4”那么这个打印级别是在哪里输出呢?
  5.    我们先来看Linux系统中的一个文件:

  6. 控制台日志级别:优先级高于该值的消息将被打印至控制台。②缺省的消息日志级别:将用该值来打印没有优先级的消息。③最低的控制台日志级别:控制台日志级别可能被设置的最小值。④缺省的控制台:控制台日志级别的缺省值。
  7. 目前我们关心的是一个:
  8. 只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息。
  9. 我们再看看一般arm开发板上的设置:
  10. [root@board/]# cat /proc/sys/kernel/printk7       4       1       7
    也就是说几乎所有的信息又要打出来,因为不同的设备有不同的用途,对于开发设备来说能更多的打印信息才能更好调试。
  11. 另外想要看到所有的打印信息,还有一个命令:dmesg 
  12. 由于dmesg显示的信息太多请自行尝试。

0 0
原创粉丝点击