日期:2014-05-16  浏览次数:20518 次

linux下如何实现内核态和用户空间进程共享内存?
各位大虾好,现在正在研究在Linux内核中分配一块内存空间往里写入数据,然后由用户空间的进程来读写这块内存,现在的思路是这样子:

(1)开发一个内核模块,在内核模块中创建一块共享内存,然后通过netlink方式将这块内存的地址传给用户空间的进程。同时启动一个线程往这块内存空间中写入数据。

(2)用户空间的进程得到这个地址后根据这个地址去读取其中的内容。

我现在已经完成了通过netlink方式实现内核模块与用户进程的通信,也用mmap实现了两个用户空间进程的共享内存,但是却不知道如何实现内核模块与用户进程的共享内存,请高手指教。

另外再多问几个有关问题:
(1)像上面的思路是否能够实现?能的话是用什么方法呢?对于内存的大小有没有限制?(要求能实现1G的内存共享)

(2)如果上面的思路不可行,那反过来由用户进程分配共享内存,然后通知内核的话是否可行呢?

(3)内核的地址和用户进程的地址是如何转换的呢?

因为刚接触这块,问题比较多,请各位不吝赐教,分不够可以加,呵呵

------解决方案--------------------
http://blog.chinaunix.net/u3/94771/showart_1945422.html
------解决方案--------------------
探讨
请问1楼的大哥,为什么我在编译的时候出现错误,提示我


structure has no member named "dst_group"

就是这一行NETLINK_CB(skb).dst_group = 0;


我的内核版本是2.6.9-1.667,fedora 3

------解决方案--------------------
好程序,不错。

内核升级的时候,有些成员变量发生变化是很正常的事情。