您的位置:首页 > 运维架构 > Linux

linux初学内核之打印消息

2014-04-04 14:36 429 查看
内核版本:Linux version 3.0.15(cat /proc/version)

刚开始接触编程,从第一句打印出hello world一直用的是printf,直到接触linux内核,这一使用方法开始改变!

printk()和printf()之间的一个显著区别在于printk()允许通过指定一个标志来设置优先级。syslog会根据这个优先级标 志来决定在什么地方显示这条系统信息

对于linux内核的打印消息,kennel定义了8个优先级

code: /include/linux

#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			*/


其中

KERN_EMERG : 最高级别,一般只用来打印崩溃信息

KERN_ALERT : 需要立即处理的信息

KERN_CRIT : 关键信息,一般用来显示严重的硬件和软件错误

KERN_ERR : 用来显示硬件错误

KERN_WARNING : 显示不会造成严重错误的警告信息

KERN_NOTICE : 显示需要引起注意的信息

KERN_INFO :  显示一般信息,例如驱动所发现的硬件列表

KERN_DEBUG    :  用来显示调试信息

kernel在编译之前会先指定当前信息打印优先等级如定义为4 ,那么

#define KERN_NOTICE	"<5>"	/* normal but significant condition	*/
#define KERN_INFO	"<6>"	/* informational			*/
#define KERN_DEBUG	"<7>"	/* debug-level messages			*/


拥有这几个优先等级的打印消息都不会被打印出来

另外若在使用printk打印消息时未指定打印消息优先级时,则为默认的优先等级,这个优先等级可设

code: /kernel/printk.c

int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL,	/* console_loglevel */
DEFAULT_MESSAGE_LOGLEVEL,	/* default_message_loglevel */
MINIMUM_CONSOLE_LOGLEVEL,	/* minimum_console_loglevel */
DEFAULT_CONSOLE_LOGLEVEL,	/* default_console_loglevel */
};


DEFAULT_CONSOLE_LOGLEVEL 指定了整体默认的打印消息优先等级

DEFAULT_MESSAGE_LOGLEVEL printk在使用时未指定优先等级时采用的默认优先级

令也可以实时的改变其优先级

cat /proc/sys/kernel/printk//查看打印消息优先级

root@android:/proc/sys/kernel # cat printk

4 4 1 4

echo 8 8 > /proc/sys/kernel/printk//实时更改优先级

root@android:/proc/sys/kernel # echo 8 8 > printk

root@android:/proc/sys/kernel # cat printk

8 8 1 4

root@android:/proc/sys/kernel #
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: