请教诸位高手,小弟想实现内核空间和用户空间的公享内存,该怎么做?

发布于 2022-07-24 00:05:58 字数 62 浏览 14 评论 9

请教诸位高手,小弟想实现内核空间和用户空间的公享内存来避免内核和用户空间的拷贝,请问该如何实现?
很急,多谢了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

烙印 2022-07-27 02:19:36

不过我有个疑问想确认,这个公享的内存应该是双向的吧??

红墙和绿瓦 2022-07-27 02:18:43

原帖由 fire114 于 2006-9-4 22:38 发表
谢谢大家的帮助。
不过,我想实现是添加的内核模块和用户程序之间的公享内存。诸位大侠提到的方法都是驱动和用户程序间实现内存公享的方法吧?
不知道内核模块和用户程序之间的公享内存是否能实现?能的话该怎么 ...

内核模块和驱动有什么区别? 你给你的模块一个 io 接口不就可以 mmap 了?

无戏配角 2022-07-27 02:12:51

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 .

携君以终年 2022-07-26 23:11:44

谢谢大家的帮助。
不过,我想实现是添加的内核模块和用户程序之间的公享内存。诸位大侠提到的方法都是驱动和用户程序间实现内存公享的方法吧?
不知道内核模块和用户程序之间的公享内存是否能实现?能的话该怎么实现呢?
请教了,多谢

梦一生花开无言 2022-07-26 22:51:16

原帖由 思一克 于 2006-9-4 16:34 发表
to SNOW_INSKY,

void  *  mmap(void *start, size_t length, int prot , int flags, int fd,  off_t offset);

用户程序调用mmap用哪个参数去MAP内核kmalloc返回的从/proc得到的内存(比如0xc8001240)?

我觉得这个时候不需要区别是否是内核了吧?start就是0xc8001240,没试过。

旧故 2022-07-26 21:46:30

to SNOW_INSKY,

void  *  mmap(void *start, size_t length, int prot , int flags, int fd,  off_t offset);

用户程序调用mmap用哪个参数去MAP内核kmalloc返回的从/proc得到的内存(比如0xc8001240)?

渔村楼浪 2022-07-26 20:10:46

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.

栀梦 2022-07-26 08:50:09

恰好我有同样的问题,找到obrire几个月前有贴说在内核kmalloc出连续内存来,告诉app地址和长度,直接open /dev/mem, lseek 到这个地址,然后memset memcpy。我没有试过,如果你成功了别忘了告诉大家。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文