`
sony-soft
  • 浏览: 1024846 次
文章分类
社区版块
存档分类
最新评论

要将linux内核的带级别控制的printk内容打印出来,在命令行 输入 dmesg -n 8 就将所有级别的信息都打印出来

 
阅读更多

要将linux内核的带级别控制的printk内容打印出来,在命令行 输入 dmesg -n 8 就将所有级别的信息都打印出来

Linux命令:dmesg  功能说明:显示开机信息。

  语 法:dmesg [-cn][-s <缓冲区大小>]

  补充说明:kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。

  参 数:

  -c 显示信息後,清除ring buffer中的内容。

  -s<缓冲区大小> 预设置为8196,刚好等于ring buffer的大小。

  -n 设置记录信息的层级。

printk() 使用说明
内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk("<6>Hello, world!/n");。内核中共提供了八种不同的日志级别,在 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 */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
#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 */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */


所以 printk() 可以这样用:printk(KERN_INFO "Hello, world!/n");。

未指定日志级别的 printk() 采用的默认级别是 DEFAULT_MESSAGE_LOGLEVEL,这个宏在 kernel/printk.c 中被定义为整数 4,即对应KERN_WARNING。

在 /proc/sys/kernel/printk 会显示4个数值(可由 echo 修改),分别表示当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。当 printk() 中的消息日志级别小于当前控制台日志级别时,printk 的信息(要有/n符)就会在控制台上显示。但无论当前控制台日志级别是何值,通过 /proc/kmsg (或使用dmesg)总能查看。另外如果配置好并运行了 syslogd 或 klogd,没有在控制台上显示的 printk 的信息也会追加到 /var/log/messages.log 中。

通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:

#cat /proc/sys/kernel/printk
6   4  1   7

上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。

可用下面的命令设置当前日志级别:

# echo 8 > /proc/sys/kernel/printk

另外为了防止 printk() 瞬时被调用次数过多,可以通过 printk_ratelimit() 来控制速度。printk_ratelimit() 通过跟踪发送到控制台的消息数量工作,当输出速度超过一个临界值,就返回零。可通过修改 /proc/sys/kernel/{printk_ratelimit, printk_ratelimit_burst} 来调节 printk_ratelimit() 的计算。

printk_ratelimit() 的典型用法如下:
if (printk_ratelimit())
printk(KERN_INFO "Hello, world!/n");

分享到:
评论

相关推荐

    Linux内核驱动模块编程指南 (内核版本2.2, 2.4)The Linux Kernel Module Programming Guide CHS

    Linux内核驱动模块编程指南 (内核版本2.2, 2.4) The Linux Kernel Module Programming Guide CHS Linux内核驱动模块编程指南 (内核版本2.2, 2.4) Peter Jay Salzman Ori Pomerantz 版权 © 2001 Peter Jay Salzman...

    Linux:printk与printf的区别

    levels.h中定义),不写则默认为级别4(MESSAGE_LOGLEVEL_DEFAULT),级别高于设定的输出级别才可以显示(可在include/linux/printk.h修改宏CONSOLE_LOGLEVEL_DEFAULT设定输出级别,默认为7): 定义 级别 含义 ...

    linux内核调试方法总结

    8 内核printk和日志系统的总体结构 9 动态调试 六 内存调试工具 1 MEMWATCH 2 YAMD 3 Electric Fence 七 strace 八 OOPS 1 ksymoops 2 kallsyms 3 Kdump 九 KGDB 1 kgdb的调试原理 2 Kgdb的安装与设置 3 在VMware中...

    Linux内核调试技术之Printk

     在内核调试技术之中,简单的是printk的使用了,它的用法和C语言应用程序中的printf使用类似,在应用程序中依靠的是stdio.h中的库,而在linux内核中没有这个库,所以在linux内核中,使用这个printk要对内核的实现...

    linux console printk 代码实现分析

    对linux下8250串口驱动和console口实现方法及printk实现进行代码分析 内核版本2.6

    printk_linux_

    linux-1.0.tar.gz,早期linux源码,可用于linux的学习

    linux内核编程.pdf

    Linux内核编程 著者:Ori Pomerantz 翻译:徐辉 目 录 1.HELLO, WORLD................................................................................................三 EXHELLO.C............................

    Linux编程--Linux内核模块编程指南

    Linux内核模块编程指南 致谢 前言 第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把设备...

    printk-formats打印格式1

    If variable is of Type,use printk format specifier:Raw pointer value SHOULD be p

    linux内核 0.11版本源码 带中文注释

    这些都是试探出来的,以及看了一些bios 程序,呵! */ #define CMOS_READ(addr) ({ \ // 这段宏读取CMOS 实时时钟信息。 outb_p (0x80 | addr, 0x70); \ // 0x70 是写端口号,0x80|addr 是要读取的CMOS 内存...

    Printk日志级别

    linux系统中Printk日志级别简介

    Linux内核修炼之道-pdf版

    Linux内核问题门..........................................................................................................................13 缅怀已逝的十八年(1991~1998) ...............................

    高通平台printk输出log到串口

    1、查看当前打印级别 # cat /proc/sys/kernel/printk 默认为:4 4 1 7 ...3、内核函数printk的打印级别宏定义:Include/linux/kernel.h #define KERN_EMERG /* system is unusable */ #define KERN_ALERT

    嵌入式软件调试技术专题(3):Linux内核日志与信息打印

    Linux内核、驱动开发中的printk打印技巧、日志系统、函数调用栈、动态调试、strace命令、内核转储、使用proc文件系统查看内核信息等查看Linux内核日志及打印信息的各种工具和方法。

    linux内核修炼之道

    《LINUX内核修炼之道》精华分享与讨论(14)——内核中的链表..........................................76 《LINUX内核修炼之道》精华分享与讨论(15)——子系统的初始化:内核选项解析...........83 《LINUX内核...

    关于Linux内核进程的遍历

    int init_module () { struct task_struct *task; struct list_head *q; list_for_each (q, &init_task.tasks) ... printk ("&lt;0&gt;" "%d\t%d\t%s\n", task-&gt;pid, task-&gt;parent-&gt;pid, task-&gt;comm); } return 0; }

    Linux编程从入门到精通.rar

    第一部分 Linux内核 第1章 硬件基础与软件基础 第2章 内存管理 第3章 进程 第4章 进程间通信机制 第5章 PCI 第6章 中断处理与设备驱动程序 第7章 文件系统 第8章 网络 第9章 内核机制与模块 第10章 处理器 第12章 ...

    Linux内核编程 中文版

    4.使用/proc进行输入 5.和设备文件对话(写和IOCTLS) 6.启动参数 7.系统调用 8.阻塞进程 9.替换printk’s 10.调度任务 11.中断处理程序 11.1 Intel 结构上的键盘 12.对称多处理 常见的错误 2.0...

    Linux程序设计参考书-六部

    Linux编程实例第1章Hello, World1.1 内核模块的Makefiles文件1.2 多重文件内核模块第2章字符设备文件第3章/proc文件系统第4章把/proc用于输入第5章把设备文件用于输入第6章启动参数第7章系统调用第8章阻塞处理第9章...

    ARM_Linux启动分析.pdf

    如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入 runlevel。 sysinit、 boot、bootwait等action将在系统启动时无条件运行,而忽略其中的runlevel,其余的action(不含initdefault)都...

Global site tag (gtag.js) - Google Analytics