曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4909|回复: 0
打印 上一主题 下一主题

printk | 内核消息输出

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-8-30 02:08:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
普通应用程序中输出消息使用 printf()函数,而利用 scanf() 函数接收用户的输入。内核不接收用户的输入,没有对应的 scanf() 函数,但是使用 printk() 函数输出运行状态。

printk() 函数是创建并测试驱动程序的最有效调试工具。调试内核和设备驱动的方法虽然较多,但考虑到 printk() 的方便性,实际调试过程中基本使用 printk() 函数。该函数的使用方法和 printf() 基本相似,但具有输出和管理内核消息的特性。

printk() 函数向外部输出内核的状态,即内核消息。该内核消息为了表示多数系统的运行状态,主要输出相关错误及其他系统的变化。由管理员记录或保存内核消息,而大容量系统生成的消息量也十分惊人,因此管理员分类管理内核消息。此时根据内核消息的重要程度定义级数,并表现在内核消息的头位置,这称为“记录级别”。

记录级别在 printk()  函数上传送的字符串头文字上使用 "<1>" 等数字标记级别。该级别的有效范围为输出 "\n" 对应字符。但是表示级别时并不提倡使用 "<1>" 这样的形态。执行 printk() 函数时,虽然将字符串起始位置 "<" 和 “>" 之间的数字分为级别,但比起直接使用数字,使用 linux/kernel.h 文档上的定义的声明会更加有效,如下表所示:


含义
#define KERN_EMERG
"<0>"  /*系统不运行*/
#define KERN_ALERT
"<1>" /*总是输出*/
#define KERN_GRIT
"<2>"   /*关键信息*/
#define KERN_ERR
"<3>"   /*error信息*/
#define KERN_WARNING
"<4>"   /*警告信息*/
#define KERN_NOTICE
"<5>"   /*正常的信息*/
#define KERN_INFO
"<6>"   /*系统信息*/
#define KERN_DEBUG
"<7>"  /*调试信息*/

printk(KERN_INOF "System ok\n");

printk ("<6>" "System ok\n");
printk ("<6>System ok\n")'
含义相同。

不标识级别时,默认为 KERN_WARNING 级别,如:
printk (KERN_WARNING "System ok\n");
printk ("<4>" "System ok\n");
printk ("<4>System ok\n");
printk ("System ok\n");
上面 4 句都是一样的意思。注意,自定义语句和内核级别标识之间没有逗号分隔!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 03:08 , Processed in 0.087835 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表