映射Linux 2.6.30 DMA API的设备内存

时间:2012-09-16 00:20:18

标签: linux arm dma memory-mapping

我一直在努力争取这个,真的很感激一些帮助。我想使用我的At91sam9g45的内部SRAM(垫脚石 - 开机后不使用)来加速一些密集型计算,并且无法满足以下所有条件:

  1. 可以从用户空间访问内存。使用用户空间mmap()然后使用内核remap_pfn_range()很容易。使用返回的指针,我的用户空间程序可以读/写SRAM。

  2. 使用内核DMA API调用dma_async_memcpy_buf_to_buf()来使用DMA执行memcpy。在我的基本驱动程序中,我想调用此操作将DDR中的数据(用kmalloc()分配)复制到SRAM缓冲区中。

  3. 所以我的问题是我有用户空间和物理地址,但没有内核空间DMA API友好映射。

    我尝试过使用ioremap并使用提供给iotable_init()的固定虚拟地址。这些似乎都没有导致内核虚拟地址可用于virt_to_bus(适用于kmalloc地址,我认为在DMA API中使用)。

    有方法可以使用物理地址手动触发DMA,但我想尝试解决这个问题。我一直在阅读LDD3并使用Google搜索,但我看不到任何使用非kmalloc内存用于DMA API的示例(PCI总线除外)。

0 个答案:

没有答案