linux - 我在哪里可以得到 remap_pfn_range 的 vm_area_struct?

标签 linux arm dma

我正在使用 ARM 上的内核 3.18。我正在从正在为其编写驱动程序的相机读取数据。 我使用以下设置内存:

cpu_handle = dma_alloc_coherent(NULL, dma_size, &dma_handle, GFP_KERNEL | GFP_DMA);

这工作得很好。相机传完数据后,我用同一个内核模块读取内存,就可以看到图片了。

现在我想启动一个用户空间应用程序来读取相同的数据。 我认为要走的路是remap_pfn_range

我一直在寻找示例,但他们从未描述过的一件事是我从哪里获得 vm_area_struct。我假设这必须来自用户应用程序,对吗?对于第一个参数,它说“要映射到的用户 vma”。那么如何获得指向该结构的指针呢?

最佳答案

看起来 vma 指针来自用户空间应用程序。

在驱动程序(内核空间)中,我必须创建一些方法以及/dev 文件。

然后在用户应用程序中,我打开/dev 文件并在其上调用 mmap。这反过来又在我的驱动程序中调用了我自己的 mmap 方法,并且 vma (vm_area_struct) 被神奇地发送了。

关于linux - 我在哪里可以得到 remap_pfn_range 的 vm_area_struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684979/

相关文章:

linux - 在 LINUX 上动态运行控制台到 TTY

php - FFMPEG - 启用声音时文件大小为零

c - 尝试读取 STM32F4 上未对齐的 DMA 寄存器地址时出现硬故障

linux - 具有用于设备驱动程序培训的 DMA 功能的 PCI/PCIe 卡

c++ - ARM WINCE应用,反黑客解决方案

c - 将内存从一个内核模块重新映射到另一模块中的 DMA 缓冲区

linux - 无法使用 Flash Media Live Encoder 连接到 Linux VPS CentOS 服务器上的 Flash Media 服务器

linux - 将 Sonatype Nexus 2 安装为服务

ios - 32/64 位设备上的 Objective-C 除法会产生不同的结果

C:知道变量何时被读取或写入