Linux 内核 API dma_pool_create
创建一个用于DMA传输的内存池。它允许在设备和驱动程序之间高效地进行DMA数据传输,而无需进行缓存刷新操作。参数中的各个选项允许定制内存块的大小、对齐要求和边界,以适应不同设备的需求。
返回的DMA分配池可以通过 dma_pool_alloc()
函数来分配内存块,这些内存块都具有一致性的DMA映射,可以直接用于设备之间的数据传输
参数说明:
@name
:用于诊断的池的名称。@dev
:将执行DMA传输的设备。@size
:池中内存块的大小。@align
:内存块的对齐要求,必须是2的幂次。@boundary
:返回的内存块不会跨越这个2的幂次边界。
在使用这些池的情况下,可以使用 dma_pool_alloc()
函数分配内存。这些内存块都具有“一致性”DMA映射
,可以由设备及其驱动程序访问,而无需使用缓存刷新等。实际分配的内存块大小可能会由于对齐而比请求的大小要大。
如果@boundary
非零,那么从dma_pool_alloc()
返回的对象将不会跨越这个大小边界。这对于具有对单个DMA传输的寻址限制的设备非常有用,例如不跨越4KB边界。
返回值:具有所请求特性的DMA分配池,如果无法创建则返回%NULL
。
struct dma_pool *dma_pool_create(const char *name, struct device *dev,
size_t size, size_t align, size_t boundary)
{
struct dma_pool *retval;
size_t allocation;
bool empty = false;
// 对输入参数进行校验
if <