pr_xx( )封装
在使用printk的时候需要手动添加输出等级KERN_INFO、KERN_WARNING等,这样还是有些麻烦。因此,Linux内核也对printk进行了进一步的封装。
Linux内核将每一个输出等级封装为pr_xx()函数,例如,输出等级KERN_INFO
封装为pr_info(),输出等级KERN_WARNING
封装为pr_warn()。具体如下:
#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_warn(fmt, ...)
printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
#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_err(fmt, ...)
printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
这里对输出等级为KERN_DEBUG
的封装是比较特殊的,因为debug等级比较常用,内核对pr_debug()分为了三种情况:
如果设置了 CONFIG_DYNAMIC_DEBUG
,则此pr_debug()扩展为 dynamic_pr_debug(),主要用于 动态输出 。否则,如果定义了 DEBUG
宏,则它等同于具有 KERN_DEBUG
日志级别的 printk。 如果未定义 DEBUG,则它什么都不做 。
pr_debug()的定义如下:
/* If you are writing a driver, please use dev_dbg instead */
#if defined(CONFIG_DYNAMIC_DEBUG) ||
(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
#include < linux/dynamic_debug.h >
/**
* pr_debug - Print a debug-level message conditionally
* @fmt: format string
* @...: arguments for the format string
*
* This macro expands to dynamic_pr_debug() if CONFIG_DYNAMIC_DEBUG is
* set. Otherwise, if DEBUG is defined, it's equivalent to a printk with
* KERN_DEBUG loglevel. If DEBUG is not defined it does nothing.
*
* It uses pr_fmt() to generate the format string (dynamic_pr_debug() uses
* pr_fmt() internally).
*/
#define pr_debug(fmt, ...)
dynamic_pr_debug(fmt, ##__VA_ARGS__)
#elif defined(DEBUG)
#define pr_debug(fmt, ...)
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...)
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内核
+关注
关注
3文章
1309浏览量
39850 -
Linux
+关注
关注
87文章
10991浏览量
206742 -
函数
+关注
关注
3文章
3901浏览量
61310
发布评论请先 登录
相关推荐
Linux内核学习笔记:printk调试
很多内核开发者喜欢的调试工具是printk,在Linux内核中,使用printk()函数来打印信息,它与C库的printf()函数类似。
发表于 06-01 15:14
•636次阅读
C语言函数指针在Arm Linux内核源码中的高级玩法
函数指针在ARM Linux内核源码中有许多高级应用。在这里,我将列举一些常见的应用,附上相应的代码示例,并对代码进行解释。
发表于 09-06 11:23
•243次阅读
linux内核函数gpio_to_irq()函数的用法
我在用linux内核函数gpio_to_irq()的时候不知道它里面的参数是什么,经过追踪,发现是把io引脚编号来的,我不知道这个编号和io引脚是怎么样的联系,请大神指教
发表于 06-02 22:58
linux内核打印函数printk的方法
1.linux内核打印函数printk一、函数有头文件二、定义的关键宏三、函数原型合理的创建标题,有助于目录的生成如何改变文本的样式插入链接
发表于 12-20 07:02
如何在i.MX 8MQuad评估套件(EVK) 上构建Linux内核4.x.xx?
的内核配方都是5.x.xx以上的。内核 4.x.xx 的存储库似乎已被删除。我们将在内核版本 4.x.x
发表于 04-17 06:02
Linux内核源代码
Linux内核源代码本章讲述在L i n u x内核源码中,应该从何处开始查找特定的内核函数。本书并不要求读者具有C语言编程能力,也不要求读
发表于 02-09 15:24
•36次下载
linux内核kernel-api
linux内核kernel-api,不知道从哪儿找的了,但是你如果想要做内核编程,这是一部api函数详尽的工具书!!!五星推荐
发表于 10-30 17:16
•19次下载
linux内核是什么_linux内核学习路线
Linux内核是一个操作系统(OS)内核,本质上定义为类Unix。它用于不同的操作系统,主要是以不同的Linux发行版的形式。Linux
发表于 09-16 15:49
•2388次阅读
评论