0

我有这个 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;
    }

感谢任何可以提供帮助的人。

4

1 回答 1

1

以防万一有人遇到这个问题,答案如下:配置标志 CONFIG_FORCE_MAX_ZONEORDER 最多默认为 11 架构是造成此限制的原因。

将其增加到 12(并重新编译内核)可以解决问题。

我怀疑使用 CMA 也是可能的,但由于我的内核不支持它,我不能肯定地说。

于 2013-11-03T09:38:01.637 回答