mysql java Firefox Windows google linux命令 php Python 微软 开源 apache 程序员 Ubuntu linux HTML5 nginx wordpress Android shell centos

Linux驱动 Printk 在终端没有输出

Linux 驱动的时候 在初始化和退出的时候加了printk 但是在终端没有输出

图片

这个有输出

图片

图片

这个没有

图片

原因是要加上一个输出等级

图片

0~3的等级可以再终端输出,有一个人写的很好借来用一下:

printk无输出

Q:

int init_module()
{
printk("Hellon");
}

编译成功后,也用insmod命令成功地载入。但并没有任何输出..

A:

1.同时在另一个窗口,用命令tail -f /var/log/messages察看日志文件,会看到log

2.用dmesg命令。

它的输出是在内核log中,不是控制台

printk()函数的总结

我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。对程序的调试起到了很重要的作用。(下文中的日志级别和控制台日志控制级别是一个意思)

printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。日志级别一共有8个级别,printk的日志级别定义如下(在linux26/includelinux/kernel.h中):

#defineKERN_EMERG"<0>"/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#defineKERN_ALERT"<1>"/*报告消息,表示必须立即采取措施*/
#defineKERN_CRIT"<2>"/*临界条件,通常涉及严重的硬件或软件操作失败*/
#defineKERN_ERR"<3>"/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
#defineKERN_WARNING"<4>"/*警告条件,对可能出现问题的情况进行警告*/
#defineKERN_NOTICE"<5>"/*正常但又重要的条件,用于提醒。常用于与安全相关的消息*/
#defineKERN_INFO"<6>"/*提示信息,如驱动程序启动时,打印硬件信息*/
#defineKERN_DEBUG"<7>"/*调试级别的消息*/

没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到。

下面是一个比较简单的使用

printk(KERN_INFO "INFOn"); //这里可以使用数字代替 KERN_INFO,即可以写成printk(<6> "INFOn"); 
在这个格式的定义中,日志级别和信息文本之间不能够使用逗号隔开,因为系统在进行编译的时候,将日志级别转换成字符串于后面的文本信息进行连接。

在对系统输出进行控制时,主要是讨论控制台和伪终端的输情况,以及系统日志等。

延伸阅读

评论