2009-11-23 89 views
0

deal all,如何监控LKM中的系统日志(printk)

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

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

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

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

但它不工作得很好。

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

是有可能写一个LKM监测系统日志和重写到另一个文件?

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

非常感谢

回答

3

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

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

+0

感谢您的回复。 这很有帮助。 非常感谢! – douglas 2009-11-24 09:17:11

+0

@douglas,如果你发现他的回复很有帮助,你可以考虑对它进行提升。 – 2009-11-25 06:43:20

0

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

现在,一般来说,你可以通过多种方式进行沟通有意义的数据到用户空间程序,如:

  • 创建导致用户空间的读者,同时等待数据块字符设备驱动程序。提供一个ioctl()接口,它可以让其他程序找出多少邮件已发送等

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

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