将 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() 在内核空间和用户空间中是不是相同?

内存映射mmap 和 共享内存

如何使用 mmap 在用户空间和内核之间共享内存并且数据没有文件支持

linux下通过shmget创建的共享内存,是属于用户空间还是内核空间?

Linux 内核 内存管理内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

mmap