编程语言
首页 > 编程语言> > 使用用户空间程序传递内核模块的最佳方法是什么?

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

作者:互联网

这个问题似乎很简单,但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好被读取.

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

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

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

解决方法:

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

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

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

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

标签:c-3,producer-consumer,linux,linux-kernel
来源: https://codeday.me/bug/20190728/1564169.html