linux-kernel - mmap 可以处理 linux 驱动程序中的非连续页面范围吗?

标签 linux-kernel linux-device-driver dma

我希望能够将单个用户空间地址映射到多个低内核内存块。我有一个驱动程序,我在其中使用 pci_alloc_consistent() 分配多个 4MB block 。理想情况下,我希望用户空间进程将 8MB(即 2 个 4MB block )视为映射到其虚拟地址空间的单个缓冲区。这在 mmmap() 中可能吗?或者,有没有办法使用 pci_alloc_consistent()(或其他 API,只要内存与 dma 兼容)分配大于 4MB 的内核内存块?

如果有任何指点,我将不胜感激。 谢谢。

最佳答案

查看 mm/memory.c 中的函数 vm_insert_page()remap_pfn_range()。 您可以在以下位置找到示例:drivers/media/v4l2-core/videobuf2-dma-sg.c,函数 vb2_dma_sg_mmap()

关于linux-kernel - mmap 可以处理 linux 驱动程序中的非连续页面范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508163/

相关文章:

c - 编译内核模块时如何解决函数名冲突

c - 应用程序代码如何与内核代码通信?

linux - 将几个页面作为大区域映射到进程内存空间

c - 识别DMA内存在/proc/mtrr和/proc/iomem中?

linux-kernel - 如何进行内核线程通信?

linux-kernel - 使用Linux内核的设备的ATAG是什么?

内核模块的配置文件

linux - 如何在 Linux 内核代码中生成内核 oops 或 panic crash?

stm32 - 是否可以在 STM32F3 上使用 DMA 通过 SPI 传输无限数据?

java - 如何在 java 中使用 DMA 或 RDMA?