我正在编写一个可以在用户空间打印系统日志的 Linux 字符驱动程序。正如命令“dmesg”所做的那样。 我了解到我们用'printk'打印的所有日志都会被发送到一个名为ring buffer的空间。所以我有以下问题:
- 环形缓冲区是否在内核空间内?
- 如果是这样,我如何读取内核空间中的环形缓冲区? (我试图阅读 dmesg.c 的源代码。但它没有帮助。)
最佳答案
你要找的是/proc/kmsg
。这是内核环缓冲区!
是的,这是在内核空间内。任何试图读取它的进程都应该有 super 用户权限才能读取它!
如何读取环形缓冲区?这是来自 IBM Developerworks 的精美插图
dmesg
将是您的首选! dmesg如何完成任务?通过调用 syslog()
! syslog如何做它的工作?通过系统调用接口(interface)依次调用do_syslog()
。 do_syslog()
完成类似 this 的操作.
这里有更多资源,可以让您了解有关 /proc/kmsg
和一般内核日志记录的更多信息-
关于linux - 如何在 linux 内核空间中读取环形缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533708/