内核态的printk函数-printf

printk简介

在Linux内核中没有printf函数,那么内核是怎么打印调试信息的呢,这里我们用到的是printk函数,在内核中想要向控制台输出或者显示一些内容,必须需要printk函数,这个函数。不同之处在于, printk可以根据日志级别对消息进行分类,一共有 8个消息级别,这 8个消息级别定义在文件 include/linux/kern_levels.h里面,定义如下

#define KERN_SOH "\001" 

#define KERN_EMERG KERN_SOH "0"    紧急事件,一般是内核崩溃 
#define KERN_ALERT KERN_SOH "1"    必须立即采取行动  
#define KERN_CRIT KERN_SOH "2"     临界条件,比如严重的软件或硬件错误
#define KERN_ERR KERN_SOH "3"      错误状态,一般设备驱动中使用KERN_ERR报告硬件错误 
#define KERN_WARNING KERN_SOH "4"  警告信息,不会对系统造成严重影响 
#define KERN_NOTICE KERN_SOH "5"   有必要进行提示的一些信息 
#define KERN_INFO KERN_SOH "6"     提示性的信息 
#define KERN_DEBUG KERN_SOH "7"    调试信息

#define KERN_DEFAULT	KERN_SOH "d"	/* the default kernel loglevel */

这里一共定义了8个级别,其中0的优先级最高,7的优先级最低,如果要设备消息级别,参考如下案例:

printk(KERN_EMERG "sos message\n");

如果使用printk的时候不显示设置消息级别,那么printk将会采用默认级别为MESSAGE_LOGLEVEL_DEFAULT MESSAGE_LOGLEVEL_DEFAULT默认为 4。

在 include/linux/printk.h中有个宏 CONSOLE_LOGLEVEL_DEFAULT,定义如下:

#define CONSOLE_LOGLEVEL_DEFAULT 7

CONSOLE_LOGLEVEL_DEFAULT控制着哪些级别的消息可以显示在控制台上,此宏默认为 7,意味着只有优先级高于 7的消息才能显示在控制台上。这个就是 printk和 printf的最大区别,可以通过消息级别来决定哪些消息可以显示在控制台上。默认消息级别为 4,4的 级别比 7高,所示直接使用 printk输出的信息是可以显示在控制台上的。

调整内核printk的打印级别

在调试Linux内核模块时,有时候我们不想要这么多的内核打印信息,那我们可以操作/proc/sys/kernel/printk文件来调整printk的打印级别。其中内核printk的默认打印级别为

# cat /proc/sys/kernel/printk
7       4       1      7

该文件有四个数据,其中每一个数据代表内容为:

控制台日志级别 : 优先级高于该值的消息将会被打印到控制台
默认的消息日志级别 :将用该优先级来打印没有优先级的消息
最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)
默认的控制台日志级别:控制台日志级别的缺省值

那么我们可以手动去调整printk的打印级别,比如我需要屏蔽所有的打印级别,我们可以
#echo 1 4 1 7 > /proc/sys/kernel/printk

参考:https://blog.csdn.net/tonywgx/article/details/17504001

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值