[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也可以用来控制打印,具体有待研究。
相关推荐
内核层使用printk打印,应用层调用C库的printf打印。在内核层是调用不了文件系统中C库的printf只能用printk。 两者之间的一个显著区别在于printk允许通过指定一个标志来设置优先级(在include/linux/kern_levels.h...
linux系统中Printk日志级别简介
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
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中...
If variable is of Type,use printk format specifier:Raw pointer value SHOULD be p
printf和printk的区别:printk会在开头处加上样式的字符,N的范围是0~7,表示这个信息的级别。 当printk(……);中的n < console_loglevel 时候,这个信息才能被打印出来。 在内核文件中Printk.c (kernel)...
对linux下8250串口驱动和console口实现方法及printk实现进行代码分析 内核版本2.6
printk调试技术
linux-1.0.tar.gz,早期linux源码,可用于linux的学习
Linux内核、驱动开发中的printk打印技巧、日志系统、函数调用栈、动态调试、strace命令、内核转储、使用proc文件系统查看内核信息等查看Linux内核日志及打印信息的各种工具和方法。
9.替换PRINTK’S............................................................................................六十三 10.调度任务............................................................................
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) Peter Jay Salzman Ori Pomerantz 版权 © 2001 Peter Jay Salzman...
《LINUX内核修炼之道》精华分享与讨论(21)——二分法与PRINTK()..............................110 二分查找法的基本原理........................................................................................
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内核模块编程指南 ...第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215
比如printk()是调试内核代码时最常用的一种技术,但是这种调试方法需要对问题产生的点有个大概的感知,这样才能有的放矢地在合适的代码处添加打印信息。但是很多情况下,我们对问题产生的原因毫无头绪,也就不可能...
内核学习的方法论..........................................................................................................................9 驱动开发的方法论..............................................
#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
子任务1、编写最简单的内核模块,并将其加载到内核中 hello.c #include #include #include static int init_hello(void) { printk(KERN_INFO Hello, World!\n); return 0; } static void cleanup_hello(void) { ...