内核printk打印等级
为了确认内核打印等级以及prink 参数对打印的分级,在led驱动初始化代码【以及exit出口】加入如下代码。
每次insmod 、rmmod led模块时,根据打印等级的设置,得到不同的打印结果:
- static int __init s3c24xx_leds_init()
- {
- int ret ;
- int minor = 0 ;
- 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
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
- /* 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 */
- };
- …
Include/linux/kernel.h
- #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 */
- #define KERN_DEBUG "<7>" /* debug-level messages */
内核printk打印等级的更多相关文章
- 终端下更改printk打印级别
如何去更改printk的打印级别? 1.查看当前控制台的打印级别 # cat /proc/sys/kernel/printk 该文件有4个数字值,它们根据日志记录消息的重要性,定义将其发送到何处,上面 ...
- C语言:类似linux内核的分等级DEBUG宏(打印宏)
总结几种log打印printf函数的宏定义 http://blog.chinaunix.net/uid-20564848-id-73402.html #include <stdio.h> ...
- 更改printk打印级别
1.查看当前控制台的打印级别 cat /proc/sys/kernel/printk 4 4 1 7 其中第一个"4"表示内核打印函数printk的打印级别,只有 ...
- 41.Linux应用调试-修改内核来打印用户态的oops
1.在之前第36章里,我们学习了通过驱动的oops定位错误代码行 第36章的oops代码如下所示: Unable to handle kernel paging request at //无法处理内核 ...
- 限制printk打印频率函数printk_ratelimit【转】
转自:http://blog.csdn.net/lkkey80/article/details/45190095 版权声明:博文地址 http://blog.csdn.net/lkkey80?view ...
- 更改printk打印级别【转】
本文转载自:http://blog.csdn.net/weed_hz/article/details/8949140 1.查看当前控制台的打印级别 cat /proc/sys/kernel/print ...
- printk打印级别
默认级别 # cat /proc/sys/kernel/printk 4 4 1 7 分别是:控制台日志级别.默认的消息日志级别.最低的控制台日志级别和默认的控制台日志级别 举例 # echo 0 & ...
- 调整busybox中syslogd读取内核printk信息长度
busybox 默认读取内核printk信息长度256, 通过CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE宏可调整, 如下: #cd busybox-1.21.1#m ...
- Nginx之旅系列 - Nginx日志功能 PK Linux内核printk
题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页: http://nginx.org/ Nginx日志功能 PK Linux内核pri ...
随机推荐
- UVa 10806 Dijkstra,Dijkstra(最小费用最大流)
裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...
- 指针和引用区别 C++
#include <iostream> using namespace std; int main(){ ; void cubeByPoint(int *);//指针传参声明 void c ...
- MVC-07 案例2
二.电子商务网站 掌握该网站的开发流程和设计思路,并为数据模型中商品.商品分类,这两个类编写代码. 1.需求分析 2.数据模型规划 (1)商品类别 (2)商品信息 (3)会员信息 (4)购物车项目 ( ...
- Oracle的三种高可用集群方案
浏览了一下Oracle官方的网页以及非官方的ppt,简单了解了一下Oracle提供的高可用方案. 主要有三种: 1. RAC RAC, Real Application Clusters 多个Ora ...
- 1_HelloWorld
学iOS开发与学Swift是两件事情,Swift只是一种语言,它有官方手册,里面包含了全部的语法.对其他任何一门语言很熟悉的人,学习Swift可能只需要几天的时间.而这之后,学习iOS开发才是难点,有 ...
- Delphi 常用属性说明(超长)
Delphi组件的常用事件Onclick——当单击时触发这个事件中的代码Onchange——当改变该组件内容时触发其中的代码Oncreate——当创建时触发这个事件中的代码Onclose——当关闭的时 ...
- 初次接触VC++载入自己定义LIB 即静态链接
分为两部分 第一部分 LIBproject 用来生成LIB文件 #ifndef _myfun #define _myfun int myfun(int x,int y) { return x+y; ...
- Android 中文API (67) —— BluetoothClass.Device.Major
前言 本章内容是android.bluetooth.BluetoothClass.Device.Major,为Android蓝牙部分的章节翻译,版本为Android 2.3 r1,翻译来自中山大学 ...
- aliyun硬盘挂载
实在难以忍受公司服务器的网络问题,停用了半年的aliyun服务器今天终于决定启用了. 购买的时候是40G的硬盘空间,首先查了一硬盘情况结果发现有一个分区居然没有挂载. 第一步是创建一个分区 输入命令 ...
- mina教程
关于mina介绍这里不做阐述..... 我们先做一个关于mina的helloworld 首先先下载mina包:http://mina.apache.org/ (如果你已经下载,此步骤忽略) 下载下来以 ...