我希望能够将单个用户空间地址映射到多个低内核内存块。我有一个驱动程序,我在其中使用 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/