2015-11-19 67 views
5

我正在编写一个内核模块,它将分配一些连贯的内存并返回相应的虚拟地址和物理地址。如何从cdev获取设备

我正在注册该模块为cdev,用dma_alloc_coherent()分配空间,我想使用dma_common_mmap()将其映射到mmap。

dma_common_mmap()需要一个指向struct device的指针:我怎么能得到它?

回答

0
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag); 

该函数处理缓冲区的分配和映射。前两个参数是设备结构和所需缓冲区的大小。 该函数返回两个地方的DMA映射结果。函数的返回值是缓冲区的内核虚拟地址,驱动程序可以使用该地址。 与此同时,关联的总线地址在dma_handle中返回。

+0

你有没有设法让dma_alloc_coherent和mmap工作。我不能做到这一点。我必须写我自己的读/写功能。 – user1876942