Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121730
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 284
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-16 11:37
个人简介

不是一个称职的程序员……

文章分类

全部博文(22)

文章存档

2014年(15)

2013年(7)

我的朋友

分类: 嵌入式

2013-10-16 16:38:37

    1、printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空间,然后调用sprintf,格式化显示字符串,最后调用tty_write向终端进行信息的显示。例如:printk(KERN_INFO "Hello, world!/n")。

    2、内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有相应的宏对应。

  1. #define KERN_EMERG "<0>" /* system is unusable */
  2. #define KERN_ALERT "<1>" /* action must be taken immediately */
  3. #define KERN_CRIT "<2>" /* critical conditions */
  4. #define KERN_ERR "<3>" /* error conditions */
  5. #define KERN_WARNING "<4>" /* warning conditions */
  6. #define KERN_NOTICE "<5>" /* normal but significant */
  7. #define KERN_INFO "<6>" /* informational */
  8. #define KERN_DEBUG "<7>" /* debug-level messages */

      3、用printk,内核会根据日志级别,可能把消息打印到当前控制台上,这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。这些消息正常输出的前提是──日志输出级别小于console_loglevel(在内核中数字越小优先级越高)。没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux2.6/kernel/printk.c中可以找到。

      4、通过读写/proc/sys/kernel/printk文件可读取和修改控制台的级别。查看这个文件的方法如下:

#cat /proc/sys/kernel/printk 
它会显示4个数值(可由 echo 修改),分别表示当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。当 printk() 中的消息日志级别小于当前控制台日志级别时,printk 的信息(要有\n符)就会在控制台上显示。但无论当前控制台日志级别是何值,通过 /proc/kmsg (或使用dmesg)总能查看。
可用下面的命令设置当前日志级别:
# echo 8 > /proc/sys/kernel/printk
这样所有级别大于8的(0-7)消息都可以显示在控制台上.
其实printk始终是能输出信息的,只不过不一定是到了终端上。我们可以去/var/log/messages这个文件里面去查看。如果klogd没有运行,消息不会传递到用户空间,只能查看/proc/kmsg.


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

7大爷2013-10-17 09:20:46

 期待更多原创博文~