先解释下cma
CMA,Contiguous Memory Allocator,是内存管理中的一个模块,用于分配连续物理内存。
主要是针对多媒体,camera这种需要分配大段连续物理内存的模块使用(camera需要用到dma,dma正常只支持物理连续内存搬运)。
Cma还可以与dma子系统继承在一起,使用dma的设备驱动只需要访问dma相关api即可。
先看下cma结构体
用于描述一个cma
struct cma {
unsigned long base_pfn;//物理地址起始页帧号
unsigned long count; //总页数
//描述分页情况 0:free 1:已分配,里面的每个bit对应后面order_per_bit表示个数的分配情况
unsigned long *bitmap;
//以order_per_bit 的2次方个page为单位申请释放
unsigned int order_per_bit;