调用dma_alloc_coherent函数获得的映射,可能其最小大小为单个页。如果需要使用DMA池,需要调用dma_pool_create函数创建DMA池,再通过dma_pool_alloc函数从池中分配内存。使用完之后,需要调用dma_pool_destroy函数销毁DMA池。 以上信息仅供参考,建议查阅关于dma_alloc_coherent的书籍或者咨询技术人员,以获取更准确的信息。
下面我们以一个简单的示例来演示dma_alloc_coherent函数的使用。 #include<linux/device.h> #include<linux/dma-mapping.h> structmy_device{ structdevice*dev; void*buffer; dma_addr_tdma_addr; }; intinit_my_device(structmy_device*my_dev,size_tsize) ...
使用dma_alloc_coherent函数的步骤如下: 1.首先,在进行DMA传输的设备所在的驱动程序中,包含`#include <linux/dma-mapping.h>`头文件。 2.然后,使用`dma_alloc_coherent`函数在需要进行DMA传输的位置分配内存。通常,这个位置是在设备的`probe`函数中,或接收到需要进行DMA传输的命令时。 3.在dma_alloc_coherent函...
#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE) 进一步查找 ARM 书籍, 原来 C 代表是否使用高速缓冲存储器, 而 W 代表是否使用写缓冲区。 这样, dma_alloc_writecombine 分配出来的内存不使用缓存,但是会使用写缓冲区。 而dma_alloc_coherent 则二者都不适用。 由此,再去...
在上一篇文章中我们通过一个简单的例子大概描述了如何创建SLUB缓存,如何分配一个object。本文详细描述下...