我有这个 x86 设备和一个尝试分配 DMA 内存的内核模块。它有一个名为 dmasize 的参数,可以控制分配内存的大小。
我注意到当 dmasize=2M 时分配成功,但如果更大则分配成功。即使在启动时。我听说 CONSISTENT_DMA_SIZE 有一个限制,但是看着 lxr,我找不到它适用于 arch x86 内核 3.2。
不确定它是否相关,但这是一台具有 8GB RAM 和启用了 pae 的内核的 32 位机器。
这是对 dma_alloc_coherent 的调用:
dma_addr_t dma_handle;
if (!(_dma_vbase = dma_alloc_coherent(0, alloc_size, &dma_handle, GFP_KERNEL)) || !dma_handle) {
gprintk("_alloc_mpool: Kernel failed to allocate the memory pool of size 0x%lx\n", (unsigned long)alloc_size);
return;
}
感谢任何可以提供帮助的人。