在Linux中分配8MB物理连续内存

在Linux中分配8MB物理连续内存

CONFIG_CMA我可以在不启用内核配置参数的情况下分配超过 4MB 的物理连续内存吗?目前,我正在使用dma_alloc_coherent()call,但如果我尝试分配超过 4MB 大小的内存,则会失败。

答案1

__get_free_pages()

从描述来看O'Reilly Linux 设备驱动程序书籍,一本过时但仍然相关的书:

如果模块需要分配大块内存,通常最好使用面向页面的技术。 ...

flags论证的工作方式与内存分配;通常使用GFP_KERNELGFP_ATOMIC,也许会添加标志__GFP_DMA(对于可用于 ISA 直接内存访问操作的内存)或者__GFP_HIGHMEM当可以使用高端内存时。 order是您请求或释放的页面数的以 2 为底的对数(即 log2 N)。例如,order如果您需要一页,则为 0;如果您请求八页,则为 3。如果order太大(没有该大小的连续区域可用),则页面分配失败。这获取订单函数采用整数参数,可用于从托管平台的大小(必须是 2 的幂)中提取顺序。 order 的最大允许值为 10 或 11(对应于 1024 或 2048 页),具体取决于体系结构。然而,除了新启动的具有大量内存的系统之外,10 阶分配成功的机会很小。

相关内容