内核中预定义的内核log等级

// include/linux/kern_levels.h#define KERN_SOH    "\001"      /* ASCII Start Of Header */
#define KERN_SOH_ASCII  '\001'#define KERN_EMERG  KERN_SOH "0"    /* system is unusable */
#define KERN_ALERT  KERN_SOH "1"    /* action must be taken immediately */
#define KERN_CRIT   KERN_SOH "2"    /* critical conditions */
#define KERN_ERR    KERN_SOH "3"    /* error conditions */
#define KERN_WARNING    KERN_SOH "4"    /* warning conditions */
#define KERN_NOTICE KERN_SOH "5"    /* normal but significant condition */
#define KERN_INFO   KERN_SOH "6"    /* informational */
#define KERN_DEBUG  KERN_SOH "7"    /* debug-level messages */#define KERN_DEFAULT    KERN_SOH "d"    /* the default kernel loglevel */

为什么是\001呢,那什么又是SOH字符呢?
0~127的每个数字,都可以看做一个字符。’\001’是8进制的1,转换成十进制,也是1。

控制字符(Control Character),出现于特定的信息文本中,表示某一控制功能的字符。
  在ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。

printk打印消息控制

// linux/include/printk.h/* printk's without a loglevel use this.. */
#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT/* We show everything that is MORE important than this.. */
#define CONSOLE_LOGLEVEL_DEFAULT 7
#define CONSOLE_LOGLEVEL_MIN     1
#define CONSOLE_LOGLEVEL_DEFAULT 7 -------------------------------------------------------------------------
// kernel/printk.cint console_printk[4] = {CONSOLE_LOGLEVEL_DEFAULT,   /* console_loglevel */MESSAGE_LOGLEVEL_DEFAULT,   /* default_message_loglevel */CONSOLE_LOGLEVEL_MIN,       /* minimum_console_loglevel */CONSOLE_LOGLEVEL_DEFAULT,   /* default_console_loglevel */
};-------------------------------------------------------------------------
// linux/include/printk.hextern 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])

console_loglevel
只有当printk打印消息的log优先级高于console_loglevel时,才能输出到终端上

default_message_loglevel
printk打印消息时默认的log等级

minimum_console_loglevel
console_loglevel可以被设置的最小值

default_console_loglevel
console_loglevel的缺省值

1. 查看当前printk打印消息的log等级
# cat /proc/sys/kernel/printk
# 7 4 1 7

“7 4 1 7” 分别对应console_loglevel、default_message_loglevel、minimum_c onsole_loglevel、default_console_loglevel,意味着只有优先级高于KERN_DEBUG(7)的打印消息才能输出到终端

2. 改变console_loglevel
# echo 8 4 1 7 > /proc/sys/kernel/printk

输入“8 4 1 7”改变console_loglevel值,使得所有的打印消息都能输出到终端;
如果想屏蔽掉所有的内核printk打印,那么只需要把第一个数值调到最小值1或者0。

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

或者

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

printk打印举例

为了确认内核打印等级以及prink 参数对打印的分级,在驱动中加入如下代码。
每次insmod 、rmmod led模块时,根据打印等级的设置,得到不同的打印结果:

   printk(KERN_EMERG " 1111111 KERN_EMERG\n");printk(KERN_ALERT " 2222 KERN_ALERT\n");printk(KERN_CRIT " 3333333 KERN_CRIT\n");printk(KERN_ERR " 44444444 KERN_ERR\n");printk(KERN_WARNING " 55555 KERN_WARNING\n");printk(KERN_NOTICE " 66666 KERN_NOTICE\n");printk(KERN_INFO " 77777 KERN_INFO\n");printk(KERN_DEBUG " 888888 KERN_DEBUG\n");printk(" 9999 no_fix\n");

操作:

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

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

insmod 模块后,打印信息如下:

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

linux内核中printk的打印级别相关推荐

  1. Linux内核之 printk 打印

    Linux内核之 printk 打印 前言 一.printk 介绍 1. printk 消息级别 2.内核 printk 文件 二.调整打印级别 1.在 menuconfig 中修改 2.在系统中修改 ...

  2. Linux内核中max()宏的奥妙何在?(一)

    Linux内核中max()宏的奥妙何在?(一) 1.max()宏那点事 在Linux内核中,有这样四个比较大小的函数,如下: max(x,y) //两个数求最大值 min(x,y) //两个数求最小值 ...

  3. Linux 内核中的 GCC 特性(zz)

    from:http://www.ibm.com/developerworks/cn/linux/l-gcc-hacks/ GCC 和 Linux 是出色的组合.尽管它们是独立的软件,但是 Linux ...

  4. linux标准c和c编译器6,linux内核中GNU C和标准C的区别

    linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...

  5. 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表

    文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...

  6. Linux内核中读写文件数据的方法

    Linux内核中读写文件数据的方法     有时候需要在Linuxkernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数, ...

  7. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法     有时候需要在Linuxkernel ...

  8. linux 内核 hrtimer,hrtimer在Linux内核中重复任务

    我的目标是使用hrtimer结构在 linux内核中创建一个定期任务.我希望它每500毫秒重复一次. 但是,我对hrtimer在linux内核中的工作方式有点困惑(参见linux / hrtimer. ...

  9. 如下为利用Linux内核链表创建,Linux内核中链表的实现与应用

    链表(循环双向链表)是Linux内核中最简单.最常用的一种数据结构. 1.链表的定义 struct list_head { struct list_head *next, *prev; } 这个不含数 ...

最新文章

  1. 苹果App Icon的问题
  2. vue项目适应不同屏幕做的适配器
  3. ASP.NET的错误处理机制之二(实例log4net)
  4. jdk ServiceLoader怎么用
  5. 荆门市掇刀石中学2021高考成绩查询,2021年荆门中考所有高中学校排名 荆门重点高中分数线...
  6. SAP UI5 初学者教程之二十五 - 使用代理服务器解决 SAP UI5 应用访问远端 OData 服务的跨域问题试读版
  7. python time perf_Python Time 的学习笔记
  8. 企业选择使用混合云集成的原因
  9. 禁用ohmyzsh自动更新
  10. matlab练习程序(非负矩阵分解)
  11. 99.9%的数据分析师,都做不到这些
  12. vue for循环中使用setTimeout没用 笔记
  13. 流量红利不再,餐企做私域流量要趁早
  14. Racket编程指南——17 创造语言
  15. vue 接口请求下载文件
  16. MyEclipse连接oracle数据库及代码
  17. 数论复习之费马与欧拉
  18. 物流系统管理课程(二十五)
  19. 浅谈Warshall算法
  20. HALEY KOEHN--a good graphic designer recent years

热门文章

  1. matlab图像去散焦,散焦图像的维纳滤波复原及振铃抑制
  2. 青少年成长管理 第10章 成长计划
  3. 监控IPv4和IPv6下的相同端口
  4. 检测selenium下载文件
  5. 小菜鸟的Python笔记001:将Word文档中数据汇总到Excel表格
  6. 通信工程专业学生走进C语言
  7. VM ubuntu16.04 无法将虚拟机更改为选定监视器布局
  8. pct_change()计算股市涨跌幅||增长率
  9. [论文评析]Densely Connected Convolutional Networks,CVPR,2017
  10. PixelStreaming数据通信