0
我正在ARM上使用内核3.18。我正在从我正在写驱动程序的摄像头读取数据。 我用下面的设置内存:我在哪里得到vm_area_struct remap_pfn_range?
cpu_handle = dma_alloc_coherent(NULL, dma_size, &dma_handle, GFP_KERNEL | GFP_DMA);
这是工作得很好。在相机传送数据后,我使用相同的内核模块读出内存,并且可以看到照片。
现在我想启动一个用户空间应用程序来读取相同的数据。 我想要走的路是remap_pfn_range
。
我一直在寻找例子,但是他们从来没有描述过的一件事是从哪里获得vm_area_struct。我假设这必须来自用户应用程序的权利?对于第一个参数,它说“用户vma映射到”。那么我如何得到这个结构的指针呢?
如果你的驱动程序用'dma_alloc_coherent()'分配缓冲区,它应该通过'dma_mmap_coherent()'实现对该缓冲区的'mmap()'请求,而不是直接调用'remap_pfn_range()'。 – Notlikethat
感谢您的提示。 dma_mmap_coherent似乎是这样做的方式。 – pgibbons