printk()函数为内核空间里边的信息打印函数,就像c编程时用的printf()函数一样,专供内核中的信息展示用,他没有调用printf()的原因是在编译内核时还没有c的库函数可以供调用。
在linux中,可以像使用printf()一样使用printk(),也可以加上优先级使用,比如如下:
printk(KERN_ALERT "LCD light exit.\n");
printk()函数有八个优先级定义,如下:
#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()优先级低于int console_loglevel,信息将直接打印在你的终端上(x 环境下好像不行)。如果同时 syslogd和klogd都在运行,信息也同时添加在文件 /var/log/messages,而不管是否显示在控制台上与否。我们使用像 KERN_ALERT这样的高优先级,来确保printk()将信息输出到 控制台而不是只是添加到日志文件中。 当你编写真正的实用的模块时,你应该针对可能遇到的情况使用合适的优先级。
/var/log/messages里的信息可以使用 cat /var/log/messages 进行查看。
控制台的日志级别可以使用 cat /peoc/sys/kernel/printk 查看。
控制台的日志级别可以用 echo 3 > /peoc/sys/kernel/printk 改变(3为要写入的值,可改变)。