android系统 mt6735设置printk输出log等级

文章详细介绍了LK(Bootloader)中如何控制log打印级别,包括在debug.h中的定义、不同配置方法(如通过mk文件或宏定义),以及printk日志打印级别。读者可以了解到如何通过设置不同的级别来决定哪些信息会被打印,这对于系统调试和性能优化至关重要。
摘要由CSDN通过智能技术生成

首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:vendor\mediatek\proprietary\bootable\bootloader\lk\include\debug.h(以mtk平台为例)

在include\debug.h重要代码为:

//下面做个判断:意思是如果makefile(相应的平台mk文件) 定义了DEBUG的值,就是用它,否则默认为2等级
//在bootloader\lk\project\rlk6737m_65_n.mk中:DEBUG := 2
#if defined(DEBUG)
#define DEBUGLEVEL DEBUG
#else
#define DEBUGLEVEL 2
#endif

/* debug levels 调试级别*/
#define CRITICAL 0 //数字越小级别越高,打印的信息log越少
#define ALWAYS 0
#define INFO 1
#define SPEW 2

/* output */ 输出方式介绍
void _dputc(char c); // XXX for now, platform implements 平台工具
int _dputs(const char *str);
int _dprintf(const char *fmt, ...) __PRINTFLIKE(1, 2);
int _dvprintf(const char *fmt, va_list ap);

//下面的这些打印方法具体含义是:如果级别<=之前定义的调试级别的话就打印否则不打印

#define dputc(level, str) do { if ((level) <= DEBUGLEVEL) { _dputc(str); } } while (0)
#define dputs(level, str) do { if ((level) <= DEBUGLEVEL) { _dputs(str); } } while (0)
#define dprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dprintf(x); } } while (0)
#define dvprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dvprintf(x); } } while (0)

相关DEBUG的定义有不同的方式方法,如下例子:

法①、在bootable\bootloader\lk\project\rlk6757_66_n.mk:

DEBUG :=2

这时也要注意:不要看到这里是2就表示都会打印,我现在遇到一个项目虽然在\lk\project\rlk6757_66_n.mk文件中配置了DEBUG :=2,但log并没有打印出来,原因最后找到了:

#ifdef LK_PROFILING
dprintf(INFO, "[PROFILE] ------- WDT Init takes %d ms -------- \n", (int)get_timer(time_wdt_early_init)); //打印不出来
#endif

最后发现在类似的bootable\bootloader\lk\target\rlk6757_66_n(project)\rules.mk中:

LK_PROFILING := no //LK_PROFILING := yes 一般项目都会使这个宏,所以之前并没有太关注,后续项目可能会为了性能,把log后期以这种方式关掉,注意一下

法②、在lk\include\platform\debug.h中定义了这个函数:

void debug_set_trace_level(int trace_type, int level); //设置调试级别

法③、还有在具体的代码中:如:

#define DEBUG //这里定义了这个宏

#ifdef DEBUG //判断是不是定义了,定义了就执行下面的
#define LCM_DEBUG(fmt, args...) _dprintf(fmt, ##args)

#else
#define LCM_DEBUG(fmt, args...) do {} while(0)

#endif

printk日志打印級別

#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>"     调试信息

#通过输入命令设置printk打印输出log的等级
echo "1 2 3 4" > /proc/sys/kernel/printk

分别表示:
1:当前控制台日志级别 ,第一个参数设置为1表示 KERN_ALERT     
2:默认消息日志级别
3:最小的控制台级别
4:默认控制台日志级别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全职编程-叶逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值