当前位置: 技术问答>linux和unix
linux下如何实现内核态和用户空间进程共享内存?
来源: 互联网 发布时间:2017-01-18
本文导语: 各位大虾好,现在正在研究在Linux内核中分配一块内存空间往里写入数据,然后由用户空间的进程来读写这块内存,现在的思路是这样子: (1)开发一个内核模块,在内核模块中创建一块共享内存,然后通过netlink方...
各位大虾好,现在正在研究在Linux内核中分配一块内存空间往里写入数据,然后由用户空间的进程来读写这块内存,现在的思路是这样子:
(1)开发一个内核模块,在内核模块中创建一块共享内存,然后通过netlink方式将这块内存的地址传给用户空间的进程。同时启动一个线程往这块内存空间中写入数据。
(2)用户空间的进程得到这个地址后根据这个地址去读取其中的内容。
我现在已经完成了通过netlink方式实现内核模块与用户进程的通信,也用mmap实现了两个用户空间进程的共享内存,但是却不知道如何实现内核模块与用户进程的共享内存,请高手指教。
另外再多问几个有关问题:
(1)像上面的思路是否能够实现?能的话是用什么方法呢?对于内存的大小有没有限制?(要求能实现1G的内存共享)
(2)如果上面的思路不可行,那反过来由用户进程分配共享内存,然后通知内核的话是否可行呢?
(3)内核的地址和用户进程的地址是如何转换的呢?
因为刚接触这块,问题比较多,请各位不吝赐教,分不够可以加,呵呵
(1)开发一个内核模块,在内核模块中创建一块共享内存,然后通过netlink方式将这块内存的地址传给用户空间的进程。同时启动一个线程往这块内存空间中写入数据。
(2)用户空间的进程得到这个地址后根据这个地址去读取其中的内容。
我现在已经完成了通过netlink方式实现内核模块与用户进程的通信,也用mmap实现了两个用户空间进程的共享内存,但是却不知道如何实现内核模块与用户进程的共享内存,请高手指教。
另外再多问几个有关问题:
(1)像上面的思路是否能够实现?能的话是用什么方法呢?对于内存的大小有没有限制?(要求能实现1G的内存共享)
(2)如果上面的思路不可行,那反过来由用户进程分配共享内存,然后通知内核的话是否可行呢?
(3)内核的地址和用户进程的地址是如何转换的呢?
因为刚接触这块,问题比较多,请各位不吝赐教,分不够可以加,呵呵
|
http://blog.chinaunix.net/u3/94771/showart_1945422.html
|
那个blog上写了 特别说明:该程序只适用于2.6.25左右的新版本!
我道行很浅 只有等内核版的高手来给你解决了
|
好程序,不错。
内核升级的时候,有些成员变量发生变化是很正常的事情。
内核升级的时候,有些成员变量发生变化是很正常的事情。