为了确认内核打印等级以及prink 参数对打印的分级,在led驱动初始化代码【以及exit出口】加入如下代码。

每次insmod 、rmmod led模块时,根据打印等级的设置,得到不同的打印结果:

  1. static int __init s3c24xx_leds_init()
  2. {
  3.     int ret ;
  4.     int minor = 0 ;
  5.  
  6.    printk(KERN_EMERG " 1111111 KERN_EMERG\n");
  7.    printk(KERN_ALERT " 2222 KERN_ALERT\n");
  8.    printk(KERN_CRIT " 3333333 KERN_CRIT\n");
  9.    printk(KERN_ERR " 44444444 KERN_ERR\n");
  10.    printk(KERN_WARNING " 55555 KERN_WARNING\n");
  11.    printk(KERN_NOTICE " 66666 KERN_NOTICE\n");
  12.    printk(KERN_INFO " 77777 KERN_INFO\n");
  13.    printk(KERN_DEBUG " 888888 KERN_DEBUG\n");
  14.    printk(" 9999 no_fix\n");
  15. …
  16. }

操作:

一次性地设置编译内核源码时默认的打印级数:【它们在kernel/printk.c中定义】

echo 8 4 1 7 > /proc/sys/kernel/printk

8. 为KERN_DEBUG

# echo 8 4 1 7 > /proc/sys/kernel/printk

# insmod myleds_new.ko

1111111 KERN_EMERG

2222 KERN_ALERT

3333333 KERN_CRIT

44444444 KERN_ERR

55555 KERN_WARNING

66666 KERN_NOTICE

77777 KERN_INFO

888888 KERN_DEBUG

9999 no_fix

7. 为默认

#cat /proc/sys/kernel/printk

  #7 4 1 7

打印结果:

111111 KERN_EMERG

2222 KERN_ALERT

3333333 KERN_CRIT

44444444 KERN_ERR

55555 KERN_WARNING

66666 KERN_NOTICE

77777 KERN_INFO

9999 no_fix

6.

# echo 6 4 1 7 > /proc/sys/kernel/printk

# insmod myleds_new.ko

1111111 KERN_EMERG

2222 KERN_ALERT

3333333 KERN_CRIT

44444444 KERN_ERR

55555 KERN_WARNING

66666 KERN_NOTICE

9999 no_fix

5.

# echo 5 1 4 7 > /proc/sys/kernel/printk

# rmmod myleds_new.ko

1111111 KERN_EMERG

2222 KERN_ALERT

3333333 KERN_CRIT

44444444 KERN_ERR

55555 KERN_WARNING

9999 no_fix

4.

# echo 4 4 1 7 > /proc/sys/kernel/printk

# insmod myleds_new.ko

1111111 KERN_EMERG

2222 KERN_ALERT

3333333 KERN_CRIT

44444444 KERN_ERR

3.

# echo 3 4 1 7 > /proc/sys/kernel/printk

# rmmod myleds_new.ko

1111111 KERN_EMERG

2222 KERN_ALERT

3333333 KERN_CRIT

2.

# echo 2 4 1 7 > /proc/sys/kernel/printk

# insmod myleds_new.ko

1111111 KERN_EMERG

2222 KERN_ALERT

1.

# echo 1 4 1 7 > /proc/sys/kernel/printk

# insmod myleds_new.ko

1111111 KERN_EMERG

分析:

手动设置打印等级为5 1 4 7 及其以上时(重启会失效),会打印KERN_WARNING 以及没有加格式参数的printk打印信息。

KERN_DEBUG优先级最低。

KERN_EMERG优先级最高。

其它的,按级数递推。

假设要默认打印无fix的printk,

kernel/printk.c

#define DEFAULT_CONSOLE_LOGLEVEL (XX); xx >=5

假设要默认打印KERN_DEBUG信息

#define DEFAULT_CONSOLE_LOGLEVEL (XX); xx=8

//上述操作,一次性的可以使用echo xx 4 1 7 > /proc/sys/kernel/printk

源代码参考:

kernel/printk.c

  1. /* printk's without a loglevel use this.. */
  2. #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
  3.  
  4. /* We show everything that is MORE important than this.. */
  5. #define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
  6. #define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
  7.  
  8. DECLARE_WAIT_QUEUE_HEAD(log_wait);
  9.  
  10. int console_printk[4] = {
  11.    DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel */
  12.    DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel */
  13.    MINIMUM_CONSOLE_LOGLEVEL, /* minimum_console_loglevel */
  14.    DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel */
  15. };
  16. …

Include/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 condition */
  7. #define KERN_INFO "<6>" /* informational */
  8. #define KERN_DEBUG "<7>" /* debug-level messages */

内核printk打印等级的更多相关文章

  1. 终端下更改printk打印级别

    如何去更改printk的打印级别? 1.查看当前控制台的打印级别 # cat /proc/sys/kernel/printk 该文件有4个数字值,它们根据日志记录消息的重要性,定义将其发送到何处,上面 ...

  2. C语言:类似linux内核的分等级DEBUG宏(打印宏)

    总结几种log打印printf函数的宏定义 http://blog.chinaunix.net/uid-20564848-id-73402.html #include <stdio.h> ...

  3. 更改printk打印级别

    1.查看当前控制台的打印级别 cat /proc/sys/kernel/printk 4    4    1    7 其中第一个"4"表示内核打印函数printk的打印级别,只有 ...

  4. 41.Linux应用调试-修改内核来打印用户态的oops

    1.在之前第36章里,我们学习了通过驱动的oops定位错误代码行 第36章的oops代码如下所示: Unable to handle kernel paging request at //无法处理内核 ...

  5. 限制printk打印频率函数printk_ratelimit【转】

    转自:http://blog.csdn.net/lkkey80/article/details/45190095 版权声明:博文地址 http://blog.csdn.net/lkkey80?view ...

  6. 更改printk打印级别【转】

    本文转载自:http://blog.csdn.net/weed_hz/article/details/8949140 1.查看当前控制台的打印级别 cat /proc/sys/kernel/print ...

  7. printk打印级别

    默认级别 # cat /proc/sys/kernel/printk 4 4 1 7 分别是:控制台日志级别.默认的消息日志级别.最低的控制台日志级别和默认的控制台日志级别 举例 # echo 0 & ...

  8. 调整busybox中syslogd读取内核printk信息长度

    busybox 默认读取内核printk信息长度256, 通过CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE宏可调整, 如下: #cd busybox-1.21.1#m ...

  9. Nginx之旅系列 - Nginx日志功能 PK Linux内核printk

    题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页: http://nginx.org/ Nginx日志功能 PK Linux内核pri ...

随机推荐

  1. UVA 10798 - Be wary of Roses (bfs+hash)

    10798 - Be wary of Roses You've always been proud of your prize rose garden. However, some jealous f ...

  2. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

  3. pcap文件格式解析

    pcap文件格式是常用的数据报存储格式,包括wireshark在内的主流抓包软件都可以生成这种格式的数据包 下面对这种格式的文件简单分析一下:    pcap文件的格式为:  文件头    24字节  ...

  4. HDU1181【有向图的传递闭包】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1181 题意很简单. 有用并查集做的.我这里用传递闭包做. 有向图的传递闭包采用Floyd思想,可以判断 ...

  5. hdu 3228 (最大流+二分)

    题意:一共有N个城市,一些城市里有金矿,一些城市里有仓库,金矿和仓库都有一个容量,有M条边,每条边是双向的,有一个权值,求将所有金矿里的储量都运送到仓库中,所需要经过的道路中,使最大的权值最小 思路: ...

  6. mysql基本总结

    创建数据库 creat table test( #整数通常使用int test_id int, #小数通常使用decimal test_price decimal, #普通文本通常使用,并使用Defa ...

  7. Objective-c 类的继承 方法重写 方法重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...

  8. c 输出9x9乘法口诀表 这个学for循环绕不开的一题

    #include<stdio.h> int main(void) { int i,j; ;i<=;i++) { ;j<=i;j++) { printf("%d*%d= ...

  9. SQL Server调试常用参数

    SQL Server 清除缓存: DBCC DROPCLEANBUFFERS 从缓冲池中删除所有清除缓冲区. DBCC FREEPROCCACHE 从过程缓存中删除所有元素. DBCC FREESYS ...

  10. MBProgressHUD简单使用

    使用HUD最多的情形用于请求等待提示 例如做登录的时候在确认登陆的时候可以用HUD提示正在登陆. 最基本的使用 初始化 //self.view代表在哪个view中显示hud MBProgressHUD ...