您的位置:首页 > 移动开发 > Android开发

android底层驱动学习之log的输出

2016-12-13 14:39 1601 查看
1.对于printk()函数:

用法:printk( KERN_DEBUG "Serial: 21285 driver\n");//红色字体为level

那么在linux/kernel文件中:

#define    KERN_EMERG    "<0>"    

#define    KERN_ALERT    "<1>"    

#define    KERN_CRIT    "<2>"    

#define    KERN_ERR    "<3>"    

#define    KERN_WARNING    "<4>"    

#define    KERN_NOTICE    "<5>"    

#define    KERN_INFO    "<6>"    

#define    KERN_DEBUG    "<7>"    

而当前默认的level为

#define DEFAULT_CONSOLE_LOGLEVEL 7

 所以例子中的信息是打不出来的,要level大于7的才可以打出来。

将#define DEFAULT_CONSOLE_LOGLEVEL 7--------》#define DEFAULT_CONSOLE_LOGLEVEL
8

这样就可以了!

2.对于 dev_emerg/dev_alert/dev_crit/dev_err/dev_warn/dev_notice/_dev_info 函数

#define define_dev_printk_level(func, kern_level)
\

int func(const struct device *dev, const char *fmt, ...)
\

{ \
struct va_format vaf;
\
va_list args;
\
int r;
\
\
va_start(args, fmt);
\
\
vaf.fmt = fmt;
\
vaf.va = &args;
\
\
r = __dev_printk(kern_level, dev, &vaf);
\
va_end(args);
\
\
return r;
\

} \

EXPORT_SYMBOL(func);

define_dev_printk_level(dev_emerg, KERN_EMERG);

define_dev_printk_level(dev_alert, KERN_ALERT);

define_dev_printk_level(dev_crit, KERN_CRIT);

define_dev_printk_level(dev_err, KERN_ERR);

define_dev_printk_level(dev_warn, KERN_WARNING);

define_dev_printk_level(dev_notice, KERN_NOTICE);

define_dev_printk_level(_dev_info, KERN_INFO);

#endif

 这里利用宏 define_dev_printk_level 定义了 dev_emerg/dev_alert/dev_crit/dev_err/dev_warn/dev_notice/_dev_info 等几个函数。其实这几个函数归根结底都是函数调用__dev_printk。

那下面再来看下__dev_printk函数的定义:

int __dev_printk(const char *level, const struct
device *dev,
struct va_format *vaf)

{
if (!dev)
return printk("%s(NULL device *): %pV", level, vaf);

return printk("%s%s %s: %pV",
     level, dev_driver_string(dev), dev_name(dev), vaf);

}

而__dev_printk调用的就是prinkk函数,该函数上面已经讲过,就是通过DEFAULT_CONSOLE_LOGLEVEL
来控制的,一般现在这个值为7,所以这几个函数的信息全部都可以打印出来。

3.对于dev_dbg()

还是先看定义:

#define
dev_dbg(dev, format, arg...) \
dev_printk(KERN_DEBUG, dev, format, ##arg)

看到没有歧视调用的也是dev_printk(),只不过level变成KERN_DEBUG,也就是打印不出来,所以如果需要将其信息打印出来还是要改DEFAULT_CONSOLE_LOGLEVEL为8才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: