How to transition ION to DMA-BUF heaps

news2024/11/18 2:53:50

目录

DMA-BUF

ION

Call flow

DMA-BUF heaps

Differences between ION and DMA-BUF heaps

Why replace ION with DMA-BUF heaps

Reference

相关代码

DMA-BUF heaps To Replace ION

How to in Kernel Space

How to in User Space

Ueventd

sepolicy

Transition Example

Transition Example(一)

Transition Example(二)

Transition Example(三)

Transition Example(四)

Transition Example(五)

Transition Example(六)

DMA-BUF heaps in 8450

Qcom heaps and sepolicy item

Qcom gralloc

Qcom camera driver

DMA-BUF heaps调用堆栈分析

CSLAlloc  ->...-> dma_heap_buffer_alloc

Gralloc -> ... -> dma_heap_buffer_alloc

小结


DMA-BUF

如这张图所示,这是一条简单的 pipeline 图。

Sensor 出一帧,送给高通的 IFE,然后在送给IPE,IPE会分为三路:

第一路:TARGET_BUFFER 有可能被CPU访问,或者可能被GPU访问。如果这个buffer 是要放回给应用层做显示用的,那么这个buffer 可能会被display 访问。

第二路:送给ASD node 这路,取决于ASD算法是CPU实现的,还是GPU实现的。

第三路:如果FDManager 是高通硬件做的,那么可能会被高通的 cvp 访问,如果是软件算法,那么会被cpu访问。所以,IPE输出的一个 buffer 可能被 CPU,GPU,display,cvp 所共享。

DMA-BUF主要解决CPU和各种外设之间的buffer共享。其次, DMA-BUF 设计之初就是为满足那些大内存访问需求的硬件而设计的,如GPU/DPU/NPU。在这种场景下,如果使用CPU直接去访memory,那么性能会大大降低。
 

ION

• ION是基于DMA-BUF的框架实现的一种内存分配器

Call flow

DMA-BUF heaps

  1. DMA-BUF heaps也是一种基于DMA-BUF框架实现的内存分配器。
  2. DMA-BUF heaps已经upstream到kernel的mainline,而ION待在
    android的staging中好多年,到现在都没有mainline。
  3. 最新的kernel中还upstream了system和cma两个dma-buf heap的
    实现。system_uncached heap正在走upstream的流程

Differences between ION and DMA-BUF heaps

Why replace ION with DMA-BUF heaps

  1. ION太复杂,很难upstream,⽽DMA-BUF heaps结构清晰,实现简单,已经 mainline,由kernel upstream进⾏维护, ABI兼容性可以得到保障。
  2. DMA-BUF heaps中的每个heap都会对应⼀个设备节点,⽅便通过sepolicy进⾏权限控制。
  3. 由于ION⽀持客制化的heap id和heap flag,很难开发统⼀的测试框架。⽽DMA-BUF heap向上接⼝统⼀,不⽀持heap flag,⽅便对heap框架和mainline的heap开发统⼀的测试程序。

Reference

相关代码

DMA-BUF: common/driver/dma-buf/
ION: common/driver/android/staging/ion/
DMA-BUF:heaps: common/driver/dma-buf/dma-heap.c
                     common/driver/dma-buf/heaps/

DMA-BUF heaps To Replace ION

How to in Kernel Space

How to in User Space

Ueventd

sepolicy

Transition Example

如下举例说明如何将一个ion heap(Heap ID: MY_HEAP, Heap Flag: ION_FLAG_MY_FLAG)转成DMA-BUF heap。并且以ClientA为例说明,如何调用libdmabufheap的接口从这个heap中分配buffer。

Transition Example(一)

Transition Example(二)

Transition Example(三)

Transition Example(四)

Transition Example(五)

Transition Example(六)

DMA-BUF heaps in 8450

  1. Qcom heaps and sepolicy item
  2. Qcom gralloc implementation
  3. Qcom camera’s driver

Qcom heaps and sepolicy item

Qcom gralloc

已经完成从libion到libdmabufheap的迁移
path: hardware/qcom/display/gralloc

Qcom camera driver

已经完成从ion到dma-buf heaps的迁移
path: camera-kernel/drivers/cam_req_mgr/cam_mem_mgr.c

DMA-BUF heaps调用堆栈分析

1.在kernel源代码中 include/trace/events/dma_buf.h 加上如下patch:

2.在kernel源代码中 drivers/dma-buf/dma-heap.c 加上如下patch:

CSLAlloc  ->...-> dma_heap_buffer_alloc

Gralloc -> ... -> dma_heap_buffer_alloc

小结

  1. 可以看到在安卓13之后,无论是 CSLAlloc接口申请的 imagebuffer,还是 Gralloc接口申请的 imagebuffer ,底层都是调用 dma_buf heaps,进而去调用 dma_buf 去分配内存的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript入门——(5)函数

1、为什么需要函数 函数:function,是被设计为执行特定任务的代码块 说明:函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,有利于精简代码方便复用。 比如之前使用的ale…

华为数通方向HCIP-DataCom H12-831题库(多选题:201-220)

第201题 DHCP Snooping是一种DHCP安全特性,这项技术可以防御以下哪些攻击? A、DHCP Server仿冒者攻击 B、针对DHCP客户端的畸形报文泛洪攻击 C、仿冒DHCP报文攻击 D、DHCP Server的拒绝服务攻击 答案:ABD 解析: 第202题 两台PE之间通过MP-BGP传播VPNv4路由,以下哪些场景…

ContextInfo.get_full_tick 获取最新分笔数据

resultContextInfo.get_full_tick(ContextInfo.trade_code_list) print(result[ContextInfo.trade_code_list[0]][lastPrice])#打印最新价

Gnuradio+AM解调

1. https://wiki.gnuradio.org/index.php/PLL_Carrier_Tracking 2. https://wiki.gnuradio.org/index.php?titleComplex_to_Mag#Example_Flowgraph

pandas 处大 csv 文件:chunk

用 pandas 读取 csv 的常见方法: import pandas as pddf pd.read_csv("your_csv_file.csv") 但对于大型的 csv 文件,直接读取可能会报错 numpy.core._exceptions._ArrayMemoryError 我的机器是 24G 内存,直接读大概只允许单个最…

交通物流模型 | MDRGCN:用于多模式交通客流预测的深度学习模型

城市交通拥堵是造成交通事故的重要原因,也是城市发展的主要障碍。通过学习历史交通流数据,我们可以预测未来一些区域的交通流,这对城市道路规划、交通管理、交通控制等都有重要意义。然而,由于交通网络拓扑结构的复杂性和影响交通流的因素的多样性,交通模式往往是复杂多变…

ASUS华硕ZenBook灵耀X逍遥UXF3000E_UX363EA原装出厂预装Win11系统工厂模式安装包

下载链接:https://pan.baidu.com/s/1WLPp0e5AZErtX3bJIhTZMg?pwd2j7i 带有ASUS Recovery恢复功能、自带所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家等预装程序 所需要工具:16G或以上的U盘(非必需) 文件格式:HDI,SWP,OFS,E…

docker安装运行环境相关的容器

docker安装常用软件步骤 docker安装Tomcat:latest 2023-10-09 1)搜索镜像 以Tomcat为例子,先去官网仓库搜索https://hub.docker.com/search?qtomcat 或者直接命令查询 docker search tomcat2)拉取镜像 docker pull tomcat3&#xff09…

室内渲染的艺术:创造理想空间的视觉魔法!

在繁忙的生活中,我们常常渴望拥有一个属于自己的安静空间。这个空间可以是一间温馨的卧室,也可以是一间舒适的客厅,甚至可以是一个小小的书房。而这个空间的营造,离不开室内渲染。 室内渲染是一种艺术,它用色彩、光线…

postgres数据迁移

1.在原数据库:pg_dump -h 【ip】-p 端口 -U 用户 -d 数据库名称> 文件名 pg_dump -h localhost -p 5432 -U postgres -d confluence> confluence.bak2.目标数据库一定要保证是新建的数据库。将文件拷贝到目标数据库所在的服务器:psql -U 用户名 -…

SRC实战-cookie注入漏洞

目录 谷歌语法-信息收集 cookie注入 实战演示 信息收集 SQL注入判断 查找字段数 爆破表名 输出结果 总结 本文由掌控安全学院 - 小博 投稿 谷歌语法-信息收集 1.查找带有ID传参的网站(可以查找sql注入漏洞) inurl:asp idxx 2.查找网站后台&…

xshell安装完成在windows不能打开

文章目录 问题描述问题排查解决第一步第二步 问题描述 安装打开xshell的时候总是点击没有任何的反应,重启电脑后再次点击xshell也没有任何的响应。只有在重装软件后才能正常打开。 问题排查 点击打开xshell7的时候总是报如下错 在这里能看到具体的描述&#xff…

【运维笔记】Docker 部署Kibana-7.4.0(在线Docker版)

Docker 部署Kibana-7.4.0(在线Docker版) 一、准备工作: Centos 7.5 安装 Docker-24.0.6 详细步骤(避坑版): https://blog.csdn.net/seesun2012/article/details/133674191注意1:本文的命令使用…

【SpringMVC篇】详解SpringMVC入门案例

🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎍SpringMVC简介⭐优点 🌺SpringMVC入门…

SpringBoot整合Jaspty数据库密码加密

1.application.yml配置 2.利用jaspty工具类将数据库密码明文加密 /*** 明文加密*/public static String encrypt(String str,String pwd) {BasicTextEncryptor basicTextEncryptor new BasicTextEncryptor();basicTextEncryptor.setPassword(pwd);String ciphertext basicTe…

京东代码规范与解决图片底部空白缝隙问题

解决图片底端默认空白缝隙问题 给图片加边框,因为图片和文字底线对齐故会留出空白的部分 解决 :给图片vertical-align: middle; 块级元素独占一行 解决2:给图片转换成块级元素,防止其机械的对齐 方框中的文字如果显示不开自动…

技术篇——废水除铊、除铊吸附树脂技术

铊是一种有毒有害的重金属元素,对人体的神经、心血管、消化系统等都有较大的危害。因此,对铊污染的废水进行治理是非常必要的。 虽然铊的应用范围比较广泛,但同时也是一种剧毒的重金属,与砷、汞等重金属相比,铊污染较…

二维码解码文字或者链接怎么做?二维码分解内容的方法

当需要提取出二维码中的文字或者链接时该如何处理呢?一般想要获取二维码中的文本/链接内容可以使用二维码解码(二维码解码器在线-二维码图片解码-二维码转短链接生成器-机智熊二维码)工具来处理,只需要上传二维码图片就可以自动识…

购买新风机那些注意事项?

在购买新风机时,需要注意以下几个关键因素: 需求分析:首先要明确自己的需求。确定你希望新风机覆盖的面积和使用场所,以及你对新风机功能和性能的要求。这有助于筛选出适合的型号和规格。 新风量:新风量是衡量新风机性…

手写模拟SpringBoot核心流程

通过手写模拟实现一个Spring Boot,让大家能以非常简单的方式就能知道Spring Boot大概是如何工作的。 依赖 建一个工程,两个Module: 1.springboot模块,表示springboot框架的源码实现 2.user包,表示用户业务系统,用来写…