我正在研究一个研究项目,我必须在内核模块和用户空间程序之间共享一个大型数据结构。数据结构可能变得非常大,并且由于应用程序对性能至关重要,我尝试使用共享内存来减少序列化结构的开销(使用其他接口,如NetLink)。我目前根据此链接制作了测试代码:
[http://people.ee.ethz.ch/~arkeller/linux/kernel_user_space_howto.html#s8][1]
他们正在使用 debugfs 。 我将链接中的代码添加到我的内核模块中,并编写了一个类似于他们的自定义用户空间程序。我尝试使用小尺寸的数据结构,效果很好。您可以在代码中注意到,它们只共享1页内存。我想知道是否有一种简单的方法来分享比一页更多的内存。
答案 0 :(得分:6)
在做很多页面方面并没有太大的不同。
在open(alloc_pages或变体)中分配更多页面,将它们存储在一个数组中,然后你的错误处理程序需要(基于错误地址):
struct page *
您可以继续使用debugfs,或者在模块初始化中进行少量额外工作,在其上放置一个更标准的字符设备前端。 (为此,没有什么需要在module_init / module_exit部分之外进行更改。)