2015-11-19 62 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