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为要写入的值,可改变)。