怎样分配大于2MByte的连续内存

开发驱动的时候这个问题经常遇到。特别是那些多媒体设备的驱动,比如摄像头,数字电视等等,需要大块的缓冲区。

我知道的方法有以下几种:
1.预留出固定的物理内存
在编译内核的时候,在cmdline里指定内存大小时候预留出需要的内存。比如,总共有64Mbyte内存,需要预留4MB,那么指定"mem=60M"
这样在驱动程序里面可以直接使用那段划分的内存。当然,我们只有硬件物理地址,内核驱动需要先化成虚拟地址。 (只是一个线性的转化)
这样分配到的内存当然是连续的。

2.动态分配

使用dma_alloc_coherent函数,分配连续,大块的内存。但是默认情况下有两兆的限制。需要修改CONSISTENT_DMA_SIZE的值。


3.其他

你可能感兴趣的:(byte)