加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用用户空间程序传递内核模块的最佳方法是什么?

发布时间:2020-12-16 09:49:50 所属栏目:百科 来源:网络整理
导读:这个问题似乎很简单,但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好被读取. 例如,我的内核模块中有一个缓冲区,其数据将由用户空间程序使用.如果消耗了所有数据,则内核模块必须在新数据到达时通知我的程序. 这是生产者/消费者的典型问题.生产者
这个问题似乎很简单,但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好被读取.

例如,我的内核模块中有一个缓冲区,其数据将由用户空间程序使用.如果消耗了所有数据,则内核模块必须在新数据到达时通知我的程序.

这是生产者/消费者的典型问题.生产者是内核模块,消费者是用户空间程序.

今天,我向我的程序(事件)发送一个信号,并使用ioctl函数访问数据缓冲区.但我不知道这种方法是否足以解决这类问题.我害怕不必要地使用netlink或内存映射来解决这个问题.

解决方法

阅读其他一些你想要的模块.

在Linux内核中有很多选项可供选择,包括:

>虚拟文件系统,例如/ proc,/ sys,configfs,relayfs(真的看看relayfs)
> netlink
>阻止系统调用
> poll()/ epoll()&有关

/ proc可能是最简单的开始,因为它已经存在并且有大量关于如何使用它的文档.创建一个映射到缓冲区的虚拟文件,然后让用户空间应用程序打开fd并使用select.简单而无处不在.有更多的现代和“更好”的方式 – 它们将不可避免地用/ proc select()来描述,所以先学习那些将教你一些有用的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读