Linux 驱动 Printk 在终端没有输出

发布时间:2014-10-23 23:24:19
来源:分享查询网

下面是控制台日志级别的一些简要的介绍  控制台相应的日志级别定义如下:  #define MINIMUM_CONSOLE_LOGLEVEL  1   /*可以使用的最小日志级别*/  #define DEFAULT_CONSOLE_LOGLEVEL  7 /*比KERN_DEBUG 更重要的消息都被打印*/   int console_printk[4] = {  DEFAULT_CONSOLE_LOGLEVEL,/*控制台日志级别,优先级高于该值的消息将在控制台显示*/  /*默认消息日志级别,printk没定义优先级时,打印这个优先级以上的消息*/  DEFAULT_MESSAGE_LOGLEVEL,  /*最小控制台日志级别,控制台日志级别可被设置的最小值(最高优先级)*/  MINIMUM_CONSOLE_LOGLEVEL,  DEFAULT_CONSOLE_LOGLEVEL,/* 默认的控制台日志级别*/  };  在进行查看的时候,可以使用命令 cat /proc/sys/kernel/printk来查看这四个值  可以通过修改文件/proc/sys/kernel/printk中的第一个值来更改当前的控制台日志级别。   (声明:在下面的模块函数中控制台所使用的日志级别均为KERN_WARNING级别)当日志级别高于console_loglevel(控制台日志级别)时,消息才能在控制台显示出来。  假如我们写了一个如下的模块函数:  1 #include <linux/init.h>  2 #include <linux/module.h>  3 MODULE_LICENSE("Dual BSD/GPL");  4 static int book_init(void)  5 {  6  printk(KERN_EMERG "EMERG\n");  7  printk(KERN_ALERT "ALERT\n");  8  printk(KERN_CRIT " CRIT\n");  9  printk(KERN_ERR " ERR\n");  10 printk(KERN_WARNING ""WARNING\n");  11 printk(KERN_NOTICE "NOTICE\n");  12 printk(KERN_INFO "INFO\n");  13 printk(KERN_DEBUG "DEBUG\n");  14 return 0;     }  15static void book_exit(void)  16{  17 printk(KERN_ALERT "Book module exit\n");     }  18 module_init(book_init);  19 module_exit(book_exit);   在控制台(这里指的是虚拟终端 Ctrl+Alt+(F1~F6))加载模块以后,控制台给出的信息为  6~9行中要求输出的信息,我们在伪终端(如果对伪终端不是很清楚可以看相关的内容)上运行命令tail -n 10 /var/log/messages查看日志文件刚才得到的运行记录  可以发现messages中的值为KERN_WARNING级别之后所要求输出到信息值。而如果我们在文件syslog和kern-log中查看系统日志文件,一般情况下可以得到所有的输出信息   Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637057] INFO  Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637063] CRIT  Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637066] WARNING  Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637068] ERR  Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637069] ALERT  Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637070] EMERG  Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637071] NOTICE   Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637072] DEBUG  (不过在有些机器上运行得到的结果并不是这样的)  即一般情况下,syslog和kern.log两个文件中记录的内容从编程这个角度来看是基本一致的。  在目录/var/log/下有一下四个文件可以查看日志  syslog ,kern.log,messages ,DEBUG 。   syslog和kern.log一般情况下可以得到所有的系统输出值,而messages得到的是比控制台日志级别低的输出值,DEBUG得到的仅仅是DEBUG级别的  输出值。  一般情况下,优先级高于控制台日志级别的消息将被打印到控制台。优先级低于控制台日志级别的消息将被打印到messages日志文件中,而在伪终端下不打印任何的信息。  我们在进行有关编程的时候,若使用到printk()这个函数,一般查看信息是在messages和虚拟终端下进行查看,而对于syslog和kern.log下是用来检验所有信息的输出情况。

返回顶部
查看电脑版