五年前从待机及功耗中,被迫接触ION(Android的内存分配接口)一直不觉得有资格写分享文档。今天是公司春节假期第一天,我搬回到这十年前位置,公司四周依旧如初那样空无一人,回荡的是键盘的声音。
...先大概写能记得的,年后来完善...
1. ION
最早期的ION我不及的很清楚,开始的时候更多是在适配接口,看到的是内核这部几个heap name,heap id,连框架我都没想明白。
真正认识ION的时候,是内核4.19版本(Android 9?)的时候,ION做大幅度修改,我才从这个删除过程看到ION的那些东西,也是从这个版本开始,ION回归它的最核心最初衷feature,就是内存分配。只是此时ION仍然是Android配套的代码,没有在Linux kernel主线。
2. DRM GEM
接触到DRM GEM也是一个从事该方面的好朋友离职后,公司再没有精通DRM GEM的人员,由于自身工作角色(或者说给其他人印象)就是遇到内核问题,就找‘他’,渐渐的我分析过若干DRM GEM的问题,比如secure video需要分配secure memory,而且不是Android系统,没有ION了,必须要DRM GEM;比如某个芯片调试过程遇到问题怀疑和IOMMU相关,希望跳过IOMMU先用CMA走下去,需要DRM GEM分配出CMA内存;比如某个芯片IOMMU不能用,只能用CMA,等等。
3. CMA
CMA是个很有意思的小模块,如果你看到page_alloc.c,一头雾水,回过头来看CMA