你知道Linux内核调试关键技术之一的printk?

你知道Linux内核调试关键技术之一的printk?

1、简介(基于s3c2440 linux)

在内核调试技术之中,最简单的就是printk的使用了,它的用法和C语言应用程序中的printf使用类似,在应用程序中依靠的是stdio.h中的库,而在linux内核中没有这个库,所以在linux内核中,使用这个printk就要对内核的实现有一定的了解。

printf和printk的区别:printk会在开头处加上\样式的字符,N的范围是0~7,表示这个信息的级别。

当printk(\中的n MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */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 */}; 2、通过命令cat /proc/sys/kernel/printk查看等级配置: # cat /proc/sys/kernel/printk7 4 1 7

其中的 7 4 1 7,分别对应与:console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel 3、修改等级配置:

#echo \ 改变这四个值,当被console_loglevel设置为1的时候,所有的调试信息都会被打印出来。 4、printk函数记录的名称及使用

在内核文件:Kernel.h (include\\linux) 定义了0~7这8个级别的名称

#define KERN_EMERG \/* system is unusable */#define KERN_ALERT \/* action must be taken immediately */#define KERN_CRIT \/* criTIcal condiTIons */#define KERN_ERR \/* error condiTIons */#define KERN_WARNING \/* warning condiTIons */#define KERN_NOTICE \informational*/#define KERN_DEBUG \ (console_printk[0])#define

default_message_loglevel

(console_printk[1])#define

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4