linux内核中printk的打印级别
内核中预定义的内核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的打印级别相关推荐
- Linux内核之 printk 打印
Linux内核之 printk 打印 前言 一.printk 介绍 1. printk 消息级别 2.内核 printk 文件 二.调整打印级别 1.在 menuconfig 中修改 2.在系统中修改 ...
- Linux内核中max()宏的奥妙何在?(一)
Linux内核中max()宏的奥妙何在?(一) 1.max()宏那点事 在Linux内核中,有这样四个比较大小的函数,如下: max(x,y) //两个数求最大值 min(x,y) //两个数求最小值 ...
- Linux 内核中的 GCC 特性(zz)
from:http://www.ibm.com/developerworks/cn/linux/l-gcc-hacks/ GCC 和 Linux 是出色的组合.尽管它们是独立的软件,但是 Linux ...
- linux标准c和c编译器6,linux内核中GNU C和标准C的区别
linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...
- 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表
文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...
- Linux内核中读写文件数据的方法
Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数, ...
- 【转】 Linux内核中读写文件数据的方法--不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法 有时候需要在Linuxkernel ...
- linux 内核 hrtimer,hrtimer在Linux内核中重复任务
我的目标是使用hrtimer结构在 linux内核中创建一个定期任务.我希望它每500毫秒重复一次. 但是,我对hrtimer在linux内核中的工作方式有点困惑(参见linux / hrtimer. ...
- 如下为利用Linux内核链表创建,Linux内核中链表的实现与应用
链表(循环双向链表)是Linux内核中最简单.最常用的一种数据结构. 1.链表的定义 struct list_head { struct list_head *next, *prev; } 这个不含数 ...
最新文章
- 苹果App Icon的问题
- vue项目适应不同屏幕做的适配器
- ASP.NET的错误处理机制之二(实例log4net)
- jdk ServiceLoader怎么用
- 荆门市掇刀石中学2021高考成绩查询,2021年荆门中考所有高中学校排名 荆门重点高中分数线...
- SAP UI5 初学者教程之二十五 - 使用代理服务器解决 SAP UI5 应用访问远端 OData 服务的跨域问题试读版
- python time perf_Python Time 的学习笔记
- 企业选择使用混合云集成的原因
- 禁用ohmyzsh自动更新
- matlab练习程序(非负矩阵分解)
- 99.9%的数据分析师,都做不到这些
- vue for循环中使用setTimeout没用 笔记
- 流量红利不再,餐企做私域流量要趁早
- Racket编程指南——17 创造语言
- vue 接口请求下载文件
- MyEclipse连接oracle数据库及代码
- 数论复习之费马与欧拉
- 物流系统管理课程(二十五)
- 浅谈Warshall算法
- HALEY KOEHN--a good graphic designer recent years
热门文章
- matlab图像去散焦,散焦图像的维纳滤波复原及振铃抑制
- 青少年成长管理 第10章 成长计划
- 监控IPv4和IPv6下的相同端口
- 检测selenium下载文件
- 小菜鸟的Python笔记001:将Word文档中数据汇总到Excel表格
- 通信工程专业学生走进C语言
- VM ubuntu16.04 无法将虚拟机更改为选定监视器布局
- pct_change()计算股市涨跌幅||增长率
- [论文评析]Densely Connected Convolutional Networks,CVPR,2017
- PixelStreaming数据通信