使用连续内存分配器(CMA)Linux设备驱动程序开发分配内存的问题

时间:2013-02-05 10:22:45

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

我正在尝试测试连续内存分配器的DMA映射框架。我已经编译了内核3.5.7并支持CMA,我知道它是实验性的,但它应该可行。 我的目标是在内核模块中为设备分配几个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补丁能够在类似系统上分配该数量。

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

最后我决定使用内核3.5和bigphysarea补丁(来自3.2)。它很容易,就像一个魅力。

CMA也是很好的选择,但使用调试(CMA需要实际设备)有点困难。我已经用尽所有技能来找出问题所在。内核代码中的Printk只能调试这个。