`
kongweile
  • 浏览: 507068 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

printk与syslog(至少在Redhat中是这样的)+Ubuntu下用最简单的读到/proc/kmsg

 
阅读更多

在头文件 <linux/kernel.h> 中定义了 【8种可用的日志级别字符串】
KERN_EMERG    用于紧急事件消息,它们一般是系统崩溃之前提示的消息。
KERN_ALERT    用于需要立即采取动作的情况。
KERN_CRIT     临界状态,通常涉及严重的硬件或软件操作失败。
KERN_ERR      用于报告错误状态;设备驱动程序会经常使用KERN_ERR来报告来自硬件的问题。
KERN_WARNING  对可能出现问题的情况进行警告,这类情况通常不会对系统造成严重问题。
KERN_NOTICE   有必要进行提示的正常情形。许多与安全相关的状况用这个级别进行汇报。
KERN_INFO     提示性信息。很多驱动程序在启动的时候,以这个级别打印出它们找到的硬件信息。
KERN_DEBUG    用于调试信息。 

dmesg是从kernel的ring buffer(环缓冲区)中读取信息的.

那什么是ring buffer呢?
    在LINUX中,所有的系统信息(包内核信息)都会传送到ring buffer中.而内核产生的信息由printk()打印出来。系统启动时所看到的信息都是由该函数打印到屏幕中。 printk()打出的信息往往以 <0>...<2>... 这的数字表明消息的重要级别。高于一定的优先级别会打印到屏幕上,否则只会保留在系统的缓冲区中(ring buffer)。
    至于dmesg具体是如何从ring buffer中读取的,大家可以看dmesg.c源代码.很短,比较容易读懂.

     是syslogd这个守护进程根据/etc/syslog.conf,将不同的服务产生的Log记录到不同的文件中.
    LINUX系统启动后,由/etc/init.d/sysklogd先后启动klogd,syslogd两个守护进程。
    其中klogd会通过syslog()系统调用或者读取proc文件系统来从系统缓冲区(ring buffer)中得到由内核printk()发出的信息.而syslogd是通过klogd来读取系统内核信息(klogd将读到的东西发给syslogd).

 

Klogd和syslogd都是用户空间进程。
    1> 所有系统信息是输出到ring buffer中去的.dmesg所显示的内容也是从ring buffer中读取的.
    2> LINUX系统中/etc/init.d/sysklogd会启动2个守护进程:Klogd, Syslogd
    3> klogd是负责读取内核信息的,有2种方式:
       syslog()系统调用(这个函数用法比较全,大家去MAN一下看看)直接的对/proc/kmsg进行读取(再这提一下,/proc/kmsg是专门输出内核信息的地方)
    4> Klogd的输出结果会传送给syslogd进行处理,syslogd会根据/etc/syslog.conf的配置把log信息输出到/var/log/下的不同文件中.

注意将printk与syslog接合使用, 用在内核开发方面很不错.
将/etc/syslog.conf
kern.*     /tmp/my_kernel_debug.txt

在输出的文件中查看结果很不错.

 

--------------------------------------------------------------------------------------

在Ubuntu下因为做的配置文件和Redhat有些许不同,这样会比较不爽。等真正想在Ubuntu下工作了再详细查看他的日志服务器的类型吧,一般的都用Redhat下作开发。

那就不用Ubuntu提供的机制,自己直接单独开一个窗口,并用窗口去cat /proc/kmsg来查看信息,它会block住,然后随着我的调试不断打印。当有printk打印出信息的时候,自然会在窗口中打印出来的。

分享到:
评论

相关推荐

    Linux:printk与printf的区别

    在内核层是调用不了文件系统中C库的printf只能用printk。  两者之间的一个显著区别在于printk允许通过指定一个标志来设置优先级(在include/linux/kern_levels.h中定义),不写则默认为级别4(MESSAGE_LOGLEVEL_...

    Android系统开发中log的使用方法及简单的原理

    1、linux内核的log输出 在标准的linux内核开发过程中,使用printk,这是一个与printf输出打印齐名的函数,同样提供格式化输出功能,只是其有 打印级别且将信息保存到/proc/kmsg日志中,使用cat命令查看其信息[cat/...

    高通平台printk输出log到串口

    1、查看当前打印级别 ... # echo 8 &gt; /proc/sys/kernel/printk //这样串口才能打印数据 3、内核函数printk的打印级别宏定义:Include/linux/kernel.h #define KERN_EMERG /* system is unusable */ #define KERN_ALERT

    嵌入式Linux的调试技术

     Printk函数运行在内核空间,printf函数运行在用户空间。Linux内核程序只能使用printk函数输出调试信息。  防止printk函数降低linux驱动性能  Linux驱动只在开发阶段使用printk函数输出消息。正式发布linux...

    printk调试技术

    printk调试技术

    linux console printk 代码实现分析

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

    龙芯芯片技术白皮书-V9.pdf

    一般情况下,通过修改 /proc/sys/kernel/printk 的值来设置控制或读取控制台日志级别。此文件包含四个数。当前日志级别,未明确指定消息级别时的默认消息级别,最小允许的的日志级别,引导时的日志级别。向该文件...

    Linux内核编程 中文版

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

    Linux 编程白皮书

    linux编程指导第1章 HELLO, WORLD 1.1 内核模块的MAKEFILES文件 ...第9章 替换PRINTK 第10章 任务调度 第11章 中断处理程序 11.1 INTEL体系结构的键盘 第12章 对称多处理 第13章 常见错误 第三部分 Linux程序员指南

    The Linux Kernel Module Programming Guide

    10.1. Replacing printk 11. Scheduling Tasks 11.1. Scheduling Tasks 12. Interrupt Handlers 12.1. Interrupt Handlers 13. Symmetric Multi Processing 13.1. Symmetrical Multi-Processing 14. Common Pitfalls...

    uClinux内核编程

    4.使用/proc进行输入 22 5.和设备文件对话(写和IOCTLS) 30 6.启动参数 44 7.系统调用 47 8.阻塞进程 53 9.替换printk’s 63 10.调度任务 66 11.中断处理程序 71 11.1 Intel 结构上的键盘 ...

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

    Linux内核模块编程指南 ...第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215

    printk_linux_

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

    printk-formats打印格式1

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

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

    2.1. Hello, World (part 1): 最简单的内核模块 2.2. 编译内核模块 2.3. Hello World (part 2) 2.4. Hello World (part 3): 关于 __init and __exit宏 2.5. Hello World (part 4): 内核模块证书和内核模块文档说明 ...

    ( ap6181_sina33m_sc3817r验证通过_20170710_1608没有外层目录.7z

    调通sina33m下的ap6181版本 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 wb4916 AT qq.com 完成时间:2017/7/7 18:11 版本:V1.0 SDK:Android6.0.1 开发板:SC3817R 1、关闭“设置”中的“蓝牙”选项: R:\wyb...

    Linux编程从入门到精通.rar

    第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 —————————————————— 第三部分 Linux程序员指南 第1章 Linux操作系统 219 第2章 ...

    pinecube:笔记,软件和与PineCube有关的所有内容(主要是视频编码内容)

    松立方 笔记,软件和与PineCube有关的所有内容(主要是视频编码内容) 特伦克 您可能正在寻找 ,用于Allwinner S3的开源编码器 CamDroid笔记 关闭测试软件(公告板) ... echo 1 &gt; /proc/sys/kernel/printk

    ARM_Linux启动分析.pdf

    在一般的系统实现中,都使用了2、3、4、5几个级别,在 Redhat系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7- 9级别也是可以使用的,...

Global site tag (gtag.js) - Google Analytics