printk 的简要分析

来源:互联网 发布:红警扫矿软件手机 编辑:程序博客网 时间:2024/04/26 06:13

Printk的级别:

在内核代码 include/linux/kernel.h 中有如下代码, 它们表示 07这 个记录级别的名称。  

#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   */ 

 

内核会根据uboot里的tty=SACO来找到对应的硬件操作函数;console_setup

Register_console=

串口打印:

1、name=ttySAC0;

2、各种函数;

lcd打印:

1、name

2、各种函数;

 

Printk 的默认级别是4;

 

#define DBG_PRINTK printk

 

调试驱动程序时候就这样用:在驱动里觉得大概有问题的那行添加:

DBG_PRINTK("%s %s %d\n", __FILE__,__FUNCTION__,__LINE__) ,通过这个来判断到底是哪行出错

或  加上打印级别

直接:printk(KERN_DEBUG "%s %s %d\n", __FILE__,__FUNCTION__,__LINE__)

 

修改printk的级别:要小于第一个的级别才能打印,第二个是默认值

查看:cat /proc/sys/kernel/printk

7    4    1    7

修改:echo "8 4 1 7" > /proc/sys/kernel/printk 如果将console_loglevel被改为1,于是所有的printk信息都不会被打印

 

在uboot界面设置

Setenv bootargs loglevel=0,其他参数不变,这样所有的打印信息都没有了

但是启动后还可以dmesg命令将缓冲区里的内容打印出来。

Setenv bootargs debug  其他参数不变,这样所有的东西都会被打印出来。