2016-07-31 54 views
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映射到」。那麼我如何得到這個結構的指針呢?

+0

如果你的驅動程序用'dma_alloc_coherent()'分配緩衝區,它應該通過'dma_mmap_coherent()'實現對該緩衝區的'mmap()'請求,而不是直接調用'remap_pfn_range()'。 – Notlikethat

+0

感謝您的提示。 dma_mmap_coherent似乎是這樣做的方式。 – pgibbons

回答

0

看起來vma指針來自用戶空間應用程序。

在驅動程序(內核空間)中,我必須創建一些方法以及/ dev文件。

然後在用戶應用程序中,我打開了/ dev文件,並對其調用了mmap。這反過來在我的驅動程序中調用了我自己的mmap方法,並且vma(vm_area_struct)被神奇地發送。