栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

写在前面

CMA (contiguous memory allocator)连续内存分配器,被开发用于分配大的、物理连续的内存块,其底层还是依赖内核伙伴系统这样的内存管理机制。通过这套机制,在设备驱动不用时,内存管理系统将该区域用于分配和管理可移动类型页面;设备驱动使用时,用于连续内存分配,此时已经分配的页面需要进行迁移;只有当需要的时候才会被分配给Camera,HDMI等设备。CMA常常和DMA子系统集成在一起使用,对上呈现的接口是标准的DMA,也是一致性缓冲区API(dma_alloc_coherent())。实际上,设备驱动永远不会直接调用CMA API,因为CMA代替了总线地址和内核映射,直接操作页和页框号,而且没有提供管理一致性缓冲区的机制。

 

CMA初始化包括解析DTS,确定可用CMA内存区域。但CMA并不直接开放给driver的开发者,而是提供cma_alloc和cma_release两个接口函数用于分配和释放cma内存。开发者只需要在需要分配dma缓冲区的时候,调用dma相关函数就可以了,例如dma_alloc_coherent。最终dma相关的分配函数会到达cma的分配函数:dma_alloc_from_contiguous() ---> cma_alloc()

linux_mainline-5.17.0/arch/arm64/mm/init.c

321  void __init bootmem_init(void)
322  {
......
334  
335  	/*
336  
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/840498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号