将 mmap 的区域传回内核空间
Posted
技术标签:
【中文标题】将 mmap 的区域传回内核空间【英文标题】:passing mmap'd area back to kernel space 【发布时间】:2012-05-14 13:04:24 【问题描述】:我的问题是我们如何将 mmap'd 区域传回给模块,以便它可以操作该内存。
我要找的是这个:
-
我的用户空间应用程序使用数百个线程运行(因此很难跟踪内核将哪个缓冲区分配给了哪个用户空间线程)。
用户线程调用模块的 mmap 函数,得到它后,它用数据填充缓冲区。
然后它必须使用 ioctl() 将此缓冲区传递给模块,以便模块进行一些处理并修改缓冲区。
用户空间线程读取新数据
我不确定如何实施“第 3 步”。无论如何要将此用户缓冲区传递给模块,以便它知道它在内核空间中的哪个地址?
(我不能使用 malloc 或 copy_from_user)
【问题讨论】:
【参考方案1】:检查virt_to_phys()
是否适合您。
-
用户空间线程调用 mmap()。
获取缓冲区地址,用数据填充缓冲区。
使用 ioctl() 将缓冲区地址传回给模块。
模块调用 virt_to_phys(addr),对缓冲区进行处理。
稍后,用户空间线程读取处理后的数据。
【讨论】:
以上是关于将 mmap 的区域传回内核空间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mmap 在用户空间和内核之间共享内存并且数据没有文件支持
linux下通过shmget创建的共享内存,是属于用户空间还是内核空间?
Linux 内核 内存管理内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)