1.CMA的释放
CMA内存也是reserved内存保留的一部分,也是属于保留的一部分。前面我们已经讲到,cma区域在未使用状态下是会释放到伙伴系统的。在前面两节,首先把memblock的memory这部分释放,然后把reserved中的init释放,接下来在讲讲如何将cma的释放。
当内核看到设备树中有dma,cma-default, nomap,reusable这些字段是,大概率是dma专用的区域。内核不会把这个区域放到伙伴系统中。
core_initcall函数就是在调用所有的init修饰(__section(".init.text")代码段段)的区域的初始化,然后去初始化各个组件。为什么说cma的初始化是自动发生的??一直没找到cma的初始化过程。在内核的初始化过程中,core_initcall就是个宏,#define core_initcall(fn) module_init(fn) ;它会遍历这些初始化函数。
好奇怪,为什么这里的cma_init_reserved_areas必须要放到reset_init的前面?
2.代码分析
嗐,后续真用到这个知识点再回来恶补吧,这里确实每太明白这个流程。