1

我的问题是我们如何将 mmap'd 区域传回给模块,以便它可以操纵该内存。

我正在寻找的是:

  1. 我的用户空间应用程序使用数百个线程运行(因此很难跟踪内核已将哪个缓冲区分配给哪个用户空间线程)。
  2. 用户线程调用模块的 mmap 函数,得到它后,它用数据填充缓冲区。
  3. 然后它必须使用 ioctl() 将此缓冲区传递给模块,以便模块进行一些处理并修改缓冲区。
  4. 用户空间线程读取新数据

我不确定如何实施“步骤 3”。无论如何要将此用户缓冲区传递给模块,以便它知道它在内核空间中的哪个地址?

(我不能使用 malloc 或 copy_from_user)

4

1 回答 1

1

检查是否virt_to_phys()适合您。

  1. 用户空间线程调用mmap()
  2. 获取缓冲区地址,用数据填充缓冲区。
  3. 使用ioctl()将缓冲区地址传递回模块。
  4. 模块调用virt_to_phys(addr),对缓冲区进行处理。
  5. 稍后,用户空间线程读取处理后的数据。
于 2012-10-16T16:44:53.613 回答