请教诸位高手,小弟想实现内核空间和用户空间的公享内存,该怎么做?
请教诸位高手,小弟想实现内核空间和用户空间的公享内存来避免内核和用户空间的拷贝,请问该如何实现?
很急,多谢了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
请教诸位高手,小弟想实现内核空间和用户空间的公享内存来避免内核和用户空间的拷贝,请问该如何实现?
很急,多谢了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
不过我有个疑问想确认,这个公享的内存应该是双向的吧??
内核模块和驱动有什么区别? 你给你的模块一个 io 接口不就可以 mmap 了?
you can malloc memort by kmalloc in the kernel space ,and then you can output the head address by character device or proc filesystem,and then in the user space ,you can read the character device or the proc filesystem to find the start address of the memory you malloc,then call mmap ,map the memory to the process space ,but in this method ,you must note that the access of the share memory .
http://bbs.chinaunix.net/viewthr ... 2%26filter%3Ddigest
看看这个.
谢谢大家的帮助。
不过,我想实现是添加的内核模块和用户程序之间的公享内存。诸位大侠提到的方法都是驱动和用户程序间实现内存公享的方法吧?
不知道内核模块和用户程序之间的公享内存是否能实现?能的话该怎么实现呢?
请教了,多谢
我觉得这个时候不需要区别是否是内核了吧?start就是0xc8001240,没试过。
to SNOW_INSKY,
void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
用户程序调用mmap用哪个参数去MAP内核kmalloc返回的从/proc得到的内存(比如0xc8001240)?
You could kmalloc some memory in kernel, and pass this memory's start address and length to user space by proc filesystem.
Then user process could read the memory parameter from proc, and use mmap function to map this memory to its virtual address space.
Now, you can use this memory to transfer data between user space and kernel space.
Last, you must pay attention the synchronese in the process of transfering data.
恰好我有同样的问题,找到obrire几个月前有贴说在内核kmalloc出连续内存来,告诉app地址和长度,直接open /dev/mem, lseek 到这个地址,然后memset memcpy。我没有试过,如果你成功了别忘了告诉大家。