通过KBUILD_MODNAME让dev_err等函数打印模块的name
来源:互联网 发布:linux中连接本地 编辑:程序博客网 时间:2024/06/11 06:46
在drivers/base/core.c 中有dev_err 等的实现
2808 #define define_dev_printk_level(func, kern_level) \
2809 void func(const struct device *dev, const char *fmt, ...) \
2810 { \
2811 struct va_format vaf; \
2812 va_list args; \
2813 \
2814 va_start(args, fmt); \
2815 \
2816 vaf.fmt = fmt; \
2817 vaf.va = &args; \
2818 \
2819 __dev_printk(kern_level, dev, &vaf); \
2820 \
2821 va_end(args); \
2822 } \
2823 EXPORT_SYMBOL(func);
2824
2825 define_dev_printk_level(dev_emerg, KERN_EMERG);
2826 define_dev_printk_level(dev_alert, KERN_ALERT);
2827 define_dev_printk_level(dev_crit, KERN_CRIT);
2828 define_dev_printk_level(dev_err, KERN_ERR);
注意在dev_err 等的函数实现define_dev_printk_level 中的fmt,这样我们在自己的驱动中可以通过定义
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
这样在驱动中通过dev_err(dev, "can't read time\n"); 打印error log的话,实际效果如下:
rtc-efi rtc-efi: can't read time
这里的关键就是KBUILD_MODNAME,
obj-$(CONFIG_RTC_DRV_EFI) += rtc-efi.o
从makefile中就可以看到这个.o的KBUILD_MODNAME 就是rtc-efi.
2808 #define define_dev_printk_level(func, kern_level) \
2809 void func(const struct device *dev, const char *fmt, ...) \
2810 { \
2811 struct va_format vaf; \
2812 va_list args; \
2813 \
2814 va_start(args, fmt); \
2815 \
2816 vaf.fmt = fmt; \
2817 vaf.va = &args; \
2818 \
2819 __dev_printk(kern_level, dev, &vaf); \
2820 \
2821 va_end(args); \
2822 } \
2823 EXPORT_SYMBOL(func);
2824
2825 define_dev_printk_level(dev_emerg, KERN_EMERG);
2826 define_dev_printk_level(dev_alert, KERN_ALERT);
2827 define_dev_printk_level(dev_crit, KERN_CRIT);
2828 define_dev_printk_level(dev_err, KERN_ERR);
注意在dev_err 等的函数实现define_dev_printk_level 中的fmt,这样我们在自己的驱动中可以通过定义
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
这样在驱动中通过dev_err(dev, "can't read time\n"); 打印error log的话,实际效果如下:
rtc-efi rtc-efi: can't read time
这里的关键就是KBUILD_MODNAME,
obj-$(CONFIG_RTC_DRV_EFI) += rtc-efi.o
从makefile中就可以看到这个.o的KBUILD_MODNAME 就是rtc-efi.
阅读全文
0 0
- 通过KBUILD_MODNAME让dev_err等函数打印模块的name
- dev_err
- 通过串口打印GPS的信息------SF2820模块
- 通过模块参数进程PID打印进程的虚存区
- 如何查找python的模块函数等信息
- 通过定义css让页面可以打印指定的底色
- of_find_property(np, name, lenp)等函数的理解
- 怎样让PDM图形列表显示name和code等需要的信息
- 怎样让PDM图形列表显示name和code等需要的信息
- 二叉树的创建、打印、删除等函数(c)
- 简单的通过宏定义实现自定义打印函数
- 通过调用函数来实现乘法表的打印
- 通过npm安装Express等模块
- 让nginx日志中打印出通过f5跳转的内网请求的源ip
- jquery 通过动态id name等获取标签
- 配置PHP XDEBUG模块后无法通过phpinfo打印出来的可能原因
- R函数-letters()、month.name()等几个内置函数
- jquery 通过name名称获取当前name的value值
- ARM-Linux移植之(一)——内核启动流程分析
- 一些精致的web UI框架及常用前端UI框架
- 数字变成大写金额
- The Festive Evening(思维题)
- C++ auto
- 通过KBUILD_MODNAME让dev_err等函数打印模块的name
- 万里长征第一步----学会做科研
- Android数据库(SQLite)框架(8)—— 总结
- 关于hashCode()与equals()的总结,所要知道的
- MAC上好用的 PDF编辑软件 PDFpenPro
- MySQL中GROUP_CONCAT中的排序和替换
- 纯JS省市区联动
- 数据库图形化安装
- java基础知识