在linux 中,内核打印语句 printk() 会将内核信息输出到内核信息缓冲区中。内核信息缓冲区是一个环形
缓冲区(ring buffer),因此,如果插入的信息过多,就会将之前的信息冲刷掉。
printk() 定义了8个消息级别,分为级别0 ~ 7,级别越低(数值越大)的消息越不重要,第0级是紧急事件,
第7级是调试级,在内核中 include/linux/printk.h 中的定义如下:
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
0级,代表紧急事件,一般是系统崩溃之前提示的消息
1级,必须立即采取行动
2级,临界状态,通常涉及严重的硬件或软件操作失败
3级,用于报告错误状态,设备驱动程序会经常使用KERN_ERR 报告来自硬件的问题
4级,对可能出现问题的情况进行警告,这类情况通常不会对系统造成严重问题
5级,有必要进行提示的正常情况,许多与安全相关的状况用这个级别进行提示
6级,内核提示性信息,很多驱动程序在启动的时候用这个级别打印出它们找到的硬件信息
7级,用于调试信息
调试时,通常使用封装了 printk 的更高级的宏,其中可替代 printk 的宏如下:
#define pr_emerg(fmt, ...)
printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
#define pr_alert(fmt, ...)
printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
#define pr_crit(fmt, ...)
printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
#define pr_err(fmt, ...)
printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
#define pr_warning(fmt, ...)
printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
#define pr_warn pr_warning
#define pr_notice(fmt, ...)
printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
#define pr_info(fmt, ...)
printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
#define pr_cont(fmt, ...)
printk(KERN_CONT fmt, ##__VA_ARGS__)
/* pr_devel() should produce zero code unless DEBUG is defined */
#ifdef DEBUG
#define pr_devel(fmt, ...)
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#else#define pr_devel(fmt, ...)
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif
在打印信息时,如果要打印所出其所在函数,可以使用 __FUNCTION__, 如下示:
printk("%s: Incorrect IRQ %d from %sn", __FUNCTION, irq, devname);
原文:http://www.cnblogs.com/aqing1987/p/4377470.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!