Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1332699
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2011-01-28 17:16:49

[内核编程入门] 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) |
给主人留下些什么吧!~~