`

手动调整内核printk打印级别

 
阅读更多
有时调试内核模块,打印信息太多了,可以通过修改/proc/sys/kernel/printk文件内容来控制。默认设置是6417

# cat /proc/sys/kernel/printk

7417

#

该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。关于不同日志级别的更多信息,请查阅syslog(2)联机帮助。上面显示的4个数据分别对应:

控制台日志级别:优先级[s1]高于该值的消息将被打印至控制台

默认的消息日志级别:将用该优先级来打印没有优先级的消息

最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)

默认的控制台日志级别:控制台日志级别的缺省值

[s1]数值越小,优先级越高

其实这四个值是在kernel/printk.c中被定义的,如下:

int console_printk[4] = {

DEFAULT_CONSOLE_LOGLEVEL,/* console_loglevel */

DEFAULT_MESSAGE_LOGLEVEL,/* default_message_loglevel */

MINIMUM_CONSOLE_LOGLEVEL,/* minimum_console_loglevel */

DEFAULT_CONSOLE_LOGLEVEL,/* default_console_loglevel */

};

内核通过printk()输出的信息具有日志级别,日志级别是通过在printk()输出的字符串前加一个带尖括号的整数来控制的,如printk("<6>Hello, world!\n");。内核中共提供了八种不同的日志级别,在linux/kernel.h中有相应的宏对应。

#define KERN_EMERG"<0>"/* systemis unusable */

#define KERN_ALERT"<1>"/* actionmust be taken immediately */

#define KERN_CRIT"<2>"/*critical conditions */

#define KERN_ERR"<3>"/* errorconditions */

#define KERN_WARNING "<4>"/* warning conditions */

#define KERN_NOTICE"<5>"/* normalbut significant */

#define KERN_INFO"<6>"/*informational */

#define KERN_DEBUG"<7>"/*debug-level messages */

所以printk()可以这样用:printk(KERN_INFO"Hello, world!\n");

未指定日志级别的printk()采用的默认级别是DEFAULT_MESSAGE_LOGLEVEL,这个宏在kernel/printk.c中被定义为整数4,即对应KERN_WARNING

/* printk's without a loglevel use this.. */

#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */

了解了上面的这些知识后,我们就应该知道如何手动控制printk打印了。例如,我想屏蔽掉所有的内核printk打印,那么我只需要把第一个数值调到最小值1或者0

# echo 1417 > /proc/sys/kernel/printk

或者

# echo 0407 > /proc/sys/kernel/printk

另外,/proc/sys/kernel/printk_ratelimit/proc/sys/kernel/printk_ratelimit_burst也可以用来控制打印,具体有待研究。

分享到:
评论

相关推荐

    Linux:printk与printf的区别

    内核层使用printk打印,应用层调用C库的printf打印。在内核层是调用不了文件系统中C库的printf只能用printk。  两者之间的一个显著区别在于printk允许通过指定一个标志来设置优先级(在include/linux/kern_levels.h...

    Printk日志级别

    linux系统中Printk日志级别简介

    高通平台printk输出log到串口

    1、查看当前打印级别 # cat /proc/sys/kernel/printk 默认为:4 4 1 7 ...3、内核函数printk的打印级别宏定义:Include/linux/kernel.h #define KERN_EMERG /* system is unusable */ #define KERN_ALERT

    linux内核调试方法总结

    8 内核printk和日志系统的总体结构 9 动态调试 六 内存调试工具 1 MEMWATCH 2 YAMD 3 Electric Fence 七 strace 八 OOPS 1 ksymoops 2 kallsyms 3 Kdump 九 KGDB 1 kgdb的调试原理 2 Kgdb的安装与设置 3 在VMware中...

    printk-formats打印格式1

    If variable is of Type,use printk format specifier:Raw pointer value SHOULD be p

    Linux内核调试技术之Printk

     printf和printk的区别:printk会在开头处加上样式的字符,N的范围是0~7,表示这个信息的级别。  当printk(……);中的n &lt; console_loglevel 时候,这个信息才能被打印出来。  在内核文件中Printk.c (kernel)...

    linux console printk 代码实现分析

    对linux下8250串口驱动和console口实现方法及printk实现进行代码分析 内核版本2.6

    printk调试技术

    printk调试技术

    printk_linux_

    linux-1.0.tar.gz,早期linux源码,可用于linux的学习

    嵌入式软件调试技术专题(3):Linux内核日志与信息打印

    Linux内核、驱动开发中的printk打印技巧、日志系统、函数调用栈、动态调试、strace命令、内核转储、使用proc文件系统查看内核信息等查看Linux内核日志及打印信息的各种工具和方法。

    linux内核编程.pdf

    9.替换PRINTK’S............................................................................................六十三 10.调度任务............................................................................

    Linux内核编程 中文版

    9.替换printk’s 10.调度任务 11.中断处理程序 11.1 Intel 结构上的键盘 12.对称多处理 常见的错误 2.0和2.2版本的区别 除此以外 其他 Goods and Services GNU GENERAL PUBLIC LICENSE 备注

    Linux内核驱动模块编程指南 (内核版本2.2, 2.4)The Linux Kernel Module Programming Guide CHS

    Linux内核驱动模块编程指南 (内核版本2.2, 2.4) The Linux Kernel Module Programming Guide CHS Linux内核驱动模块编程指南 (内核版本2.2, 2.4) Peter Jay Salzman Ori Pomerantz 版权 © 2001 Peter Jay Salzman...

    linux内核修炼之道

    《LINUX内核修炼之道》精华分享与讨论(21)——二分法与PRINTK()..............................110 二分查找法的基本原理........................................................................................

    uClinux内核编程

    9.替换printk’s 63 10.调度任务 66 11.中断处理程序 71 11.1 Intel 结构上的键盘 72 12.对称多处理 75 常见的错误 76 2.0和2.2版本的区别 76 除此以外 77 其他 78 Goods and Services 78 ...

    Linux编程--Linux内核模块编程指南

    Linux内核模块编程指南 ...第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215

    Debugging kernel and modules via GDB.pdf

    比如printk()是调试内核代码时最常用的一种技术,但是这种调试方法需要对问题产生的点有个大概的感知,这样才能有的放矢地在合适的代码处添加打印信息。但是很多情况下,我们对问题产生的原因毫无头绪,也就不可能...

    Linux内核修炼之道-pdf版

    内核学习的方法论..........................................................................................................................9 驱动开发的方法论..............................................

    Linux2.6内核启动流程.doc

    #ifdef CONFIG_BLK_DEV_... printk(KERN_CRIT "initrd overwritten (0x%08lx ) - " "disabling it.\n", page_to_pfn(virt_to_page((void *)initrd_start)), min_low_pfn); initrd_start = 0; } #endif

    Linux内核基础——Linux内核基础编程

    子任务1、编写最简单的内核模块,并将其加载到内核中 hello.c #include #include #include static int init_hello(void) { printk(KERN_INFO Hello, World!\n); return 0; } static void cleanup_hello(void) { ...

Global site tag (gtag.js) - Google Analytics