[内核编程入门] printk的使用
常想用户态程序的可能都熟悉printf,在内核空间,有一个与之类似的接口--printk。
对于使用printk,了解如下内容应该就足够了:
1. printk在进程上下文或中断上下文都可以使用。
2. 使用printk时可以指定打印到特定的log level。
3. 过快地打印过多的printk消息会影响系统性能。可以使用if (net_ratelimit()) {printk(...);}来限制打印。
关于log level,定义在include/linux/kernel.h,如下:
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
内核的消息都是保存在一个LOG_BUF_LEN大小的环形队列里的。用户态的klogd进程会从这个缓冲区获取内核消息,然后syslogd将它们根据配置保存在日志中。
阅读(702) | 评论(0) | 转发(0) |