通过KBUILD_MODNAME让dev_err等函数打印模块的name

在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.
---------------------


原文:https://blog.csdn.net/tiantao2012/article/details/76443736
 

猜你喜欢

转载自blog.csdn.net/boyemachao/article/details/88953676