Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1828679
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类: LINUX

2009-04-12 17:58:58

[内核编程入门] 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将它们根据配置保存在日志中。




阅读(1224) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~