printk的使用

来源:互联网 发布:淘宝模特摄影 编辑:程序博客网 时间:2024/05/22 07:39
1、基本原理
(1)在UBOOT里设置console=ttySAC0或者console=tty1
    这里是设置控制终端,tySAC0 表示串口, tty1 表示lcd
(2)内核用printk打印
内核就会根据命令行参数来找到对应的硬件操作函数,并将信息通过对应的硬件终端打印出来!


2、printk的使用
(1)printk函数的信息如何才能在终端显示出来
在内核代码include/linux/kernel.h中,定义了控制台的级别:
extern int console_printk[];
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
我们在到kernel/printk.c里找到console_printk的定义:
/* printk's without a loglevel use this.. */
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */


/* We show everything that is MORE important than this.. */
#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */


DECLARE_WAIT_QUEUE_HEAD(log_wait);


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 */
};

于是我们知道控制台的级别是:7   4     1     7


3、printk 消息级别定义
#define KERN_EMERG "<0>"   /*紧急事件,一般是系统崩溃之前的提示消息*/
#define KERN_ALERT  "<1>"  /*必须立即采取行动*/
#define KERN_CRIT  "<2>"   /*临界状态,通常涉及严重的硬件或者软件操作失败*/
#define KERN_ERR  "<3>"  /*用于报告错误状态,设备驱动会经常使用KERN_ERR来报告硬件错误*/
#define KERN_WARNING "<4>"  /*对可能出现问题的情况进行警告,这类情况通常不会对系统造成严重问题 */
#define KERN_NOTICE  "<5>"  /*有必要进行提示的正常情形,许多与安全相关的状况用这个级别进行汇报*/
#define KERN_INFO "<6>"  /*内核提示性信息,很多驱动程序在启动的时候以这个级别打印找到的硬件信息*/
#define KERN_DEBUG "<7>" /*用于调试信息*/


4、printk 使用方法
printk(KERN_ALERT "XXXXXX",XXXX);


4、/proc/sys/kernel/printk
     该文件可以调节printk的输出等级,文件中有四个数字值。
(1)  控制台日志级别:优先级高于该值的消息将被打印至控制台。
(2)  默认的消息日志级别:用该优先级来打印未定义优先级的消息。
(3) 最低的控制台日志级别:控制台日志界别可被设置的最小值。
(4) 默认的控制台日志级别:控制台日志级别的默认值。


5、通过如下命令可以使得Linux内核的任何printk都被输出
#echo 8 > /proc/sys/kernel/printk

6、去掉紧急事件之外内核打印信息:
   #echo 0 > /proc/sys/kernel/printk


参考文章:http://blog.e-works.net.cn/545036/articles/95147.html

                    http://liu1227787871.blog.163.com/blog/static/205363197201269104245116/



0 0
原创粉丝点击