printk使用方法介绍,内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk(“<6>Hello, world!/n”);。内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有相应的宏对应。
#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(日志级别 “消息文本”);这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。
日志级别一共有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() 可以这样用:printk(KERN_INFO “Hello, world!/n”);。
未指定日志级别的 printk() 采用的默认级别是 DEFAULT_MESSAGE_LOGLEVEL,这个宏在 kernel/printk.c 中被定义为整数 4,即对应KERN_WARNING。
在 /proc/sys/kernel/printk 会显示4个数值(可由 echo 修改),分别表示当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。当 printk() 中的消息日志级别小于当前控制台日志级别时,printk 的信息(要有/n符)就会在控制台上显示。但无论当前控制台日志级别是何值,通过 /proc/kmsg (或使用dmesg)总能查看。另外如果配置好并运行了 syslogd 或 klogd,没有在控制台上显示的 printk 的信息也会追加到 /var/log/messages.log 中。
char myname[] = “chinacodec/n”;
printk(KERN_INFO “Hello, world %s!/n”, myname);