怎样分配大于2MByte的连续内存
http://www.lupaworld.com/home/space-21999-do-blog-id-117694.html 开发驱动的时候这个问题经常遇到。特别是那些多媒体设备的驱动,比如摄像头,数字电视等等,需要大块的缓冲区。 我知道的方法有以下几种: 1.预留出固定的物理内存 在编译内核的时候,在cmdline里指定内存大小时候预留出需要的内存。比如,总共有64Mbyte内存,需要预留4MB,那么指定"mem=60M" 这样在驱动程序里面可以直接使用那段划分的内存。当然,我们只有硬件物理地址,内核驱动需要先化成虚拟地址。 (只是一个线性的转化) 这样分配到的内存当然是连续的。 2.动态分配 使用dma_alloc_coherent函数,分配连续,大块的内存。但是默认情况下有两兆的限制。需要修改CONSISTENT_DMA_SIZE的值。 3.其他 |