打开 Android 内核 pr_debug打印

梦想与她 提交于 2020-01-25 06:37:22

1.Android内核打印管理等级

在大家调试Linux内核时,想必会经常看到pr_err、pr_debug、pr_info 等打印函数,这些皆在kernel/msm-3.18/include/linux/printk.h 中定义。这里放上printk.h中部分节选。
在这里插入图片描述
这些想必看到都能懂,我们具体说下pr_debug这个打印如何使能,看到上面的截图可能许多人会问没看到pr_debug声明呀,别急,继续往下看
在这里插入图片描述
这里看到在pr_debug的声明上方有个宏的限制,也就是说我们要使能这个函数功能,就必须在你所调用的C文件中进行该宏DEBUG的定义
这里提供两个方式:
1.直接在当前C文件中定义。(简单粗暴)
2.在当前C文件同级目录下的Makefile中声明
以DMA为例,在drivers/dma/Makefile中定义了编译选项
ccflags-$(CONFIG_DMADEVICES_DEBUG) := -DDEBUG
其作用相当于在drivers/dma/所有子文件定义了宏#define DEBUG

当然,这个只是打开了宏的功能,确实能让pr_debug工作了,但是可能还会有小伙伴会说,为啥我这样做了还是看不到pr_debug的打印信息啊。当然这还是不够了,此时你需要了解内核还有一个打印级别,也就是说,你的打印级别高于这个默认级别才能看到。接下来看看这个等级是如何定义的。
kernel/msm-3.18/include/linux/printk.c
在这里插入图片描述
kernel/msm-3.18/include/linux/printk.h
在这里插入图片描述
再回到上面看pr_debug的打印级别是KERN_DEBUG,KERN_DEBUG是多少呢?
kernel/msm-3.18/include/linux/kern_levels.h在这里插入图片描述
那这样一看是不是明白了,没错pr_debug打印级别不够,所以你看不到打印信息。

如何做?

1.定义DEBUG宏控制
2.调整内核打印等级,这里有两种方式。
第一种,开机后调整
在这里插入图片描述
在这里插入图片描述
第二种,直接修改默认值(将原先的7修改成8),重新编译烧写。
#define CONSOLE_LOGLEVEL_DEFAULT 8 /* anything MORE serious than KERN_DEBUG */

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!