这个问题看起来很简单,但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好读取。
例如,我的内核模块中有一个缓冲区,其数据将由用户空间程序消耗。如果所有数据都被消耗,内核模块必须在新数据到达时通知我的程序。
这是生产者/消费者的典型问题。生产者是内核模块,消费者是用户空间程序。
今天,我向程序(事件)发送信号并使用 ioctl 函数访问数据缓冲区。但我不知道这种方法是否足以解决此类问题。我担心不必要地使用网络链接或内存映射来解决这个问题。
阅读其他一些可以实现您想要的功能的模块。
对于如何在 Linux 内核中执行此操作有很多选项,包括:
- 虚拟文件系统,例如/proc、/sys、configfs、relayfs(真正看relayfs)
- netlink
- 阻塞系统调用
- poll() / epoll() 及相关
/proc 可能是最容易开始的,因为它一直存在,并且有大量关于如何使用它的文档。创建一个映射到缓冲区的虚拟文件,然后让用户空间应用程序打开一个 fd 并使用 select。简单且无处不在。有更现代和“更好”的方法 - 它们将不可避免地用 /proc + select() 来描述,因此首先学习这些方法会教你一些有用的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)