目前,我正在尝试创建一个内核模块,该模块将根据内核事件生成数据并将其推送到文件中。在阅读了这是不好的(我同意)之后,我决定在用户程序可以在必要时从/proc文件中提取数据更有意义。然而,这个想法导致了各种各样的问题,特别是何时以及如何清除这个文件。所以我想..。“为什么我不在/proc中做一个命名的管道并从中读出来呢?”
我有为proc文件设置一个读函数和一个写函数的一般要点,但是我在如何处理这个问题上仍然存在概念上的问题。也就是说,我如何编写这样的函数来获取任意数据并将其从内核写入到这样的管道中?有人知道如何将数据从内核空间推送到命名管道吗?最后,它不必是一个/proc文件(尤其是如果我这样做是错误的),但这就是我得出的结论。然后,我将必须弄清楚如何从用户空间程序附加到它,但我觉得这是一个单独的问题。
发布于 2008-11-24 03:33:31
您要做的不是制作一个命名的管道,而是创建一个“字符设备”。如果您希望从内核到用户空间和后台进行简单的交互或流数据,这是通常的方法。我建议在Linux内核中查找类似的设备并查看它们的功能。
发布于 2008-11-24 21:32:46
我认为通常这样做的方式是使用netlink套接字;一个或多个用户空间进程可以绑定到"netlink“地址,并且您的内核工具可以根据需要将消息广播到任何/所有消息。
这当然是某些事情所做的,尤其是网络子系统。用户空间程序可以使用这种方法监视网络接口的变化(例如,新的IP地址、链路状态的变化)。
发布于 2008-11-24 04:22:46
我同意Paul的观点--实现一个字符设备可能是最好的方法。可能查看实现/dev/kmem或/dev/rtc0-9的代码。此外,串行驱动程序使用字符设备实现它们的驱动程序。
把它想象成一个虚拟设备。:-)
https://stackoverflow.com/questions/313342
复制相似问题