如何监视LKM中的syslog(printk)

时间:2009-11-23 14:57:59

标签: linux module kernel

全部交易,

我是编写Linux内核模块的新手。

我在linux内核源代码(2.4.29)中使用了printk函数来调试和显示消息。

现在,我必须阅读我通过httpd添加的所有消息。

我试图将消息写入文件而不是printk函数,所以我可以直接读取文件。

但是效果不好。

所以,我有一个愚蠢的问题......

是否可以编写LKM来监视syslog并重写到另一个文件中?

我的意思是,每当linux内核执行“printk”时,可以让LKM知道这些消息吗?

非常感谢

2 个答案:

答案 0 :(得分:3)

这是错误的方法,因为printk已经这样做了:它写入文件/ proc / kmsg。 你想要的是klogd,一个处理/ proc / kmsg的用户空间实用程序。

另一个选择是使用dmesg,它将输出包含printk消息的内核缓冲区的全部内容,但我建议你先阅读链接文章

答案 1 :(得分:0)

您永远不会想要在内核中尝试在用户空间安装的块文件系统上打开文件。想象一下,如果FS中止并且内核仍在尝试写入它... kaboom(其中很多其他原因,为什么这是一个坏主意):)正如shodanex所说,为了您的目的,使用klogd要好得多。

现在,一般来说,您可以通过多种方式将有意义的数据传递给用户空间程序,例如:

  • 创建一个字符设备驱动程序,使用户空间读取器在等待数据时阻塞。提供一个ioctl()接口,让其他程序找出已发送的消息数等。

  • 在/ proc / yourdriver中创建一个节点来完成同样的事情

真的,最实用的方法是使用printk()