【问题标题】:Problems allocating memory with Contiguous Memory Allocator (CMA) Linux device driver development使用连续内存分配器 (CMA) Linux 设备驱动程序开发分配内存的问题
【发布时间】:2013-02-05 10:22:44
【问题描述】:

我正在尝试测试 DMA 映射框架的连续内存分配器。我已经编译了支持 CMA 的内核 3.5.7,我知道它是实验性的,但它应该可以工作。 我的目标是在内核模块中为没有分散/收集功能的设备分配几个 32MB 物理上连续的内存块。

我正在使用 Barry Song 的测试补丁测试我的系统:http://thread.gmane.org/gmane.linux.kernel/1263136

但是当我尝试使用echo 1024 > /dev/cma_test 分配内存时。我得到bash: echo: write error: No space left on device。并在 dmesg:misc cma_test: no mem in CMA area

可能是什么问题?我错过了什么?系统刚刚重新启动,应该有至少 350mb 的可用连续内存,因为内核 3.2 上的 bigphysarea 补丁能够在类似系统上分配该数量。

感谢您的宝贵时间!

【问题讨论】:

  • 尝试使用启动时内存分配...
  • 我更喜欢(这是要求之一)将它放在内核模块中,我认为启动时内存分配不支持这一点。

标签: linux linux-kernel linux-device-driver embedded-linux


【解决方案1】:

最后我决定使用内核 3.5 和 bigphysarea 补丁(从 3.2 开始)。这很容易,而且效果很好。

CMA 也是不错的选择,但使用调试有点困难(CMA 需要实际设备)。我已经用尽了我所有的技能来找出问题所在。内核代码中的 Printk 是调试此代码的唯一可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2019-07-11
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多