我正在写一个Linux字符驱动程序,它可以在用户空间中打印系统日志。就像命令“dmesg”一样。
我了解到,我们使用“printk”打印的所有日志都将发送到名为“环形缓冲区”的空间。所以我有个问题:

  • 环形缓冲区是否在内核空间内?
  • 如果是这样,我如何读取内核空间中的环形缓冲区? (我尝试阅读dmesg.c的源代码。但这没有帮助。)
  • 最佳答案

    您正在寻找的是/proc/kmsg。这是内核环形缓冲区!

  • 是的,这在内核空间内。任何尝试读取它的进程都应该具有读取它的 super 用户权限!
  • 如何读取环形缓冲区?这是来自IBM Developerworks的精美插图

  • dmesg将是您的第一选择! dmesg如何完成其​​任务?通过调用syslog()! syslog如何工作?通过系统调用接口(interface),该接口(interface)依次调用do_syslog()do_syslog()的完成行为类似于this

    以下是一些其他资源,可为您提供有关/proc/kmsg和内核日志记录的一般信息,
  • http://www.makelinux.net/ldd3/chp-4-sect-2
  • http://www.ibm.com/developerworks/linux/library/l-kernel-logging-apis/index.html
  • http://oguzhanozmen.blogspot.in/2008/09/kernel-log-buffering-printk-syslog-ng.html
  • 关于linux - 如何在Linux内核空间中读取环形缓冲区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9533708/

    10-10 03:50