1 常用框架总览
视频通路经常使用大块buf,会用到一些内存相关的内核机制,本文对这些机制做概要介绍,并附一些参考资料。
1. cma
- 连续内存分配器,用于分配连续的大块内存
- dts里预留大块cma空间,不用cma分配时,cpu也可用
- 使用cma分配后,内核把cpu已使用的部分做迁移
- 参考: https://mp.weixin.qq.com/s/PLiudTUgYmznwYfICjtKlA ,https://blog.csdn.net/Rong_Toa/article/details/109558234
2. dma分配
- dma相关分配接口,真正分配内存,常以cma为基础
3. dma buf
- 与dma和内存分配没有直接关系,只是对buffer的管理和共享机制
- 链接别的机制实际分配的buffer
- 将一块块buffer与文件系统中的file和fd对应
- 利用file的唯一性,实现不同驱动模块、内核和用户空间、进程间的buffer共享
- dma buf只有框架,需要额外提供若干回调函数实现具体功能, ion,dma-heap,还有v4l2、drm里有这些回调的实现
- 参考: https://blog.csdn.net/hexiaolong2009/article/details/102596744
4 ION
- 安卓的buffer共享机制,本质是dma-buf的再包装
- linux 4.14中有ION, 在5.x版本中被删除,取而代之的是dma heap机制
5 dma heap
- linux里对dma buf的包装,实现若干回调,对外使用更方便和友好