通过gralloc分析驱动module

Android Display 之 HAL Gralloc 1.前言 之前分析过Android HAL层关于hal库是如何加载的一个小框架,源于笔者需要分析Android display框架,Android display HAL层最重要的就是Gralloc和Framebuffer。在《深入理解Android内核设计思想》一书中,有提到:Android终端显示设备的”化身“–Gralloc与Framebuffer。 在Android系统中,Framebuf... 阅读详情
Android Gralloc 是硬件抽象层,目的是把具体 framebuffer 相关的东西隔离,因为不同公司提供的framebuffer api 不同,这样就有一个统一的硬件抽象层

1.由3个模块组成

gralloc_module: 负责吧buffer 映射到进程空间 以及lock 操作
alloc_device_t :负责分配 buffer ( ashmem ) or framebuffer

framebuffer_device_t: 负责和 /dev/fb 直接打交道


2. module 和 device 的code结构

module 的基本结构是  hw_moudle_t
devce 的基本结构是 hw_device_t
都是struct 结构,其实就相当于一个类(有成员变量和指针)

通过"包裹"实现了"继承"
如:
struct gralloc_module_t{
    struct hw_module_t common; ( 父类的东西 )
    ...
    ... gralloc_module_t 自己的方法与变量
    ...
}

同样:private_module_t  实际上上 gralloc_module_t 的子类
struct private_module_t {
   gralloc_module_t base( 父类的东西 )
     ...
     ... private_module_t 自己的方法与变量
     ...

}


3.如何 Load module 和 device


a) 全局变量
/hardware/libhardware/modules/gralloc/gralloc.cpp (jelly bean)

 78struct private_module_t HAL_MODULE_INFO_SYM = {
79    base: {
80        common: {
81            tag: HARDWARE_MODULE_TAG,
82            version_major: 1,
83            version_minor: 0,
84            id: GRALLOC_HARDWARE_MODULE_ID,
85            name: "Graphics Memory Allocator Module",
86            author: "The Android Open Source Project",
87            methods: &gralloc_module_methods
88        },
89        registerBuffer: gralloc_register_buffer,
90        unregisterBuffer: gralloc_unregister_buffer,
91        lock: gralloc_lock,
92        unlock: gralloc_unlock,
93    },
94    framebuffer: 0,
95    flags: 0,
96    numBuffers: 0,
97    bufferMask: 0,
98    lock: PTHREAD_MUTEX_INITIALIZER,
99    currentBuffer: 0,
100};

b) 用 hw_get_module 打开
frameworks/native/libs/ui/FramebufferNativeWindow.cpp
78:  hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)
返回指针 hw_module_t const* ,但实际就是 private_module_t const *

而后再通过 private_module_t 的open 方法(可以带参数),分别打开 alloc_device_t 和 framebuffer_device_t



虚拟零售智能客服架构设计:如何用大模型实现多轮对话与精准推荐? 想象一下,当你在一个电商平台购物时,遇到了一个能像你的专属导购一样,不仅能听懂你模糊的需求(“我想买一件适合夏天去海边玩,又能兼顾日常通勤的裙子”),还能记得你之前提到的尺码偏好和预算,甚至在你犹豫时,主动推荐几款符合你风格且正好有促销活动的商品——这不再是科幻电影中的场景,而是基于大语言模型(LLM)技术的新一代虚拟零售智能客服能够提供的体验。这一层是我们架构设计的重点,会在后续章节详细展开。如基于CRF、RNN的模型,或基于规则的状态更新,通常需要大量标注的对话状态数据,且对新领域、新槽位的适应性差。 阅读详情

相关推荐

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3273

Android 图形系统之五:Gralloc

Gralloc (Graphics Allocator) 是 Android 系统中的关键组件之一,用于管理图形缓冲区的分配、映射以及处理。在 Android 的图形架构中,Gralloc 充当了 HAL (Hardware Abstraction Layer) 的一部分,为系统和硬件提供了通用的接口,使应用程序能够高效地处理图形数据。

执剑人 2811

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 274

Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析

老罗的Android之旅          总结: 为了在屏幕中绘制一个指定的画面,我们需要:        1.  分配一个匹配屏幕大小的图形缓冲区        2.  将分配好的图形缓冲区注册(映射)到当前进程的地址空间来        3.  将要绘制的画面的内容写入到已经注册好的图形缓冲区中去,并且渲染(拷贝)到系统帧缓冲区中去        为了实现以上三个操作,我

cosmoslhf的专栏 2038

ubuntu17.04 UHD 驱动出错

ubuntu 17.04 源码安装UHD

xrh003的博客 1万+

Foxglove Studio实战:5步搞定自动驾驶数据可视化(附避坑指南)

本文详细介绍了如何使用Foxglove Studio高效搭建自动驾驶数据可视化工作流。通过五个核心步骤:环境准备、数据导入、面板搭建、交互分析与自动化集成,帮助开发者快速掌握这一专为机器人系统设计的开源平台。文章重点解析了其与ROS/ROS 2、MCAP等数据源的无缝对接,以及3D点云、多传感器融合、团队标注等核心功能,并附有实用的性能优化与避坑指南,旨在提升算法调试与团队协作效率。

d3e4f的博客 337

Android研究_Gralloc_1概述及库加载

4.1 Gralloc概述 Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对framebuffer的所有访问操作。Gralloc模块符合Android标准的HAL架构设计。Gralloc对应的hardware id为:GRALLOC_HARDWARE_MODULE_ID Gralloc模块实现源码位于:hardware/libhardware/modules/grallo

putiancaijunyu的专栏 1830

STM32驱动AD2S1210实现旋变解码与角度读取

旋转变压器作为一种耐高温、抗振动的角度传感器,在工业伺服、机器人关节和电动汽车电驱等场景中占据重要地位。其输出信号需要经过专用转换芯片处理才能被MCU高效使用。AD2S1210是一款典型的旋变数字转换器(RDC),内部采用Type II型跟踪环,将模拟SIN/COS信号实时解算为数字角度与速度,降低了处理器负担并提升抗干扰能力。本文基于STM32平台,详细介绍了AD2S1210的硬件接线、SPI通信配置、寄存器初始化流程,以及读取位置数据时的SAMPLE脉冲时序等关键实现。同时总结了常见故障如全FF、角度跳

weixin_34194829的博客 196

Android Display架构分析

android display

lin20080410的专栏 8645

【计算机视觉40例】案例08:石头剪刀布手势识别

计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。......

计算机视觉之光 2157

linux系统中实现智能家居的基本方法

使用QT开发智能家居中的一个物联应用,通过云服务器远程控制设备与设备进行通信。在生活中,可以使用WIFI智能插座控制电器开关,比如远程开启热水器,远程打开空调,窗帘等等。包括:WIFI联网,注册到云服务器上,编写QT UI通过网络来与云服务器通信,然后再下发指令到这个连网的设备。硬件说明:需要有一个串口转WIFI模块,另外需要加上一个USB-TTL模块,外加一根T口USB连接线,可接入PC电脑调试。

嵌入式技术开发 2608

android gralloc 流程分析

Android 中 lcd 是一个帧缓冲设备,驱动程序通过处理器的 lcd 控制器将物理内存的一段区域设置为显存,如果向这段内存区域写入数据就会马上在 lcd 上显示出来。Android 在 HAL 中提供了gralloc 模块,封装了用户层对帧缓冲设备的所有操作接口,并通过 SurfaceFlinger 服务向应用提供显示支持。在启动过程中系统会加载 gralloc 模块,然后打开帧缓冲设备,获

嵌入式技术博客 1万+

基于粒子群优化的PID控制在药液流量控制系统中的应用

本文提出了一种基于粒子群优化(PSO)的PID控制算法,用于药液流量控制系统。系统采用C37控制器和Codesys 2.3编程环境实现,通过传感器实时监测流量、压力和车速,并控制水泵占空比和电动球阀开度来精确调节药液流量。硬件配置包括FT-2000流量传感器、PT-3000压力传感器和MV-500电动球阀等。控制算法将PSO与PID结合,使用ITAE指标优化PID参数,在Codesys中实现了包含PSO优化循环、PID控制等功能的程序模块。该系统通过分层控制策略和智能优化算法,提高了药液流量控制的精度和响应

AI的内部世界的博客 250

camera内存之---gralloc_buffer(3)

因为camera要申请gralloc buf的缘故,打算仔细看看grallocbuf的原理,其实之前大概知道一些,这次梳理一下。因为部分接口封成了库,所以也没有去看相关代码,但是可以理解概念,知道gralloc是什么,怎么用就可以了。 Gralloc封装了用户层对帧缓冲区的操作接口,他可以申请图形缓冲区,然后将个缓冲区映射到应用程序上来,接下来就可以绘制界面。 主要是用于gpu和fb的操作,gpu用于分配图形缓冲,fb用于渲染帧缓冲。 但是rk从安卓7.1之后实现drm驱动,fb部分被删除了,应该是底层包含

weixin_43503508的博客 2686

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

qualcomm平台的Gralloc驱动分析

前言:在MSM处理器中,重新实现了Gralloc模块的架构,此Gralloc模块是基于FrameBuffer和Pmem驱动实现的。 一、文件gralloc.cpp MSM平台中和Gralloc模块相关的文件目录:\hardware\qcom\display\libgralloc\ 在文件gralloc.cpp中,使用Gralloc中的结构体private_module_t来扩展里面的

Winston 1943

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

GUI系统之SurfaceFlinger(2)Gralloc与Framebuffer

文章都是通过阅读源码分析出来的,还在不断完善与改进中,其中难免有些地方理解得不对,欢迎大家批评指正转载请注明:From LXS. http://blog.youkuaiyun.com/uiop78uiop78/1.1 Gralloc与Framebuffer相信做过Linux开发的人对framebuffer不会太陌生,它是内核系统提供的一个与硬件无关的显示抽象层。之所以称之为buffer,是由于它也是系统存储空

林学森的技术专栏 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android的Gralloc模块

Gralloc模块是一个HAL模块,所以他有自定义的module:gralloc_module_t,和自定义的gralloc设备(alloc_device_t来描述) 和自定义的fb设备(framebuffer_device_t 来描述)。 gralloc_module_t有一个子类private_module_t ,使用模块的时候,我们使用private_module_t这个结构。 str...

liao_hb的专栏 1657

Gralloc 模块

1. 在Android Eclair 及其之后的版本中,显示系统增加了一个名为Gralloc的硬件模块。 Gralloc的含义为, Graphics Alloc(图形分配),这个模块位于libui和显示设备的驱动程序之间。 Gralloc模块被放在/system/lib/hw/下,下面是omap3的一个gralloc: $ ls system/lib/hw -l 总用量 14

1702

Android图形显示之硬件抽象层Gralloc

FrameBuffer驱动程序分析文中介绍了Linux系统下的显示驱动框架,每个显示屏被抽象为一个帧缓冲区,注册到FrameBuffer模块中,并在/dev/graphics目录下创建对应的fbX设备。Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作。用户空间的应用程序在使用帧缓冲区之间,首先要加载Gralloc模块,并且获得一个gralloc设备和一个...

架构设计 954

android的gralloc模块,Gralloc模块分析

Linux内核提供了统一的framebuffer显示驱动。Framebuffer是内核系统提供的图形硬件的抽象描述,称为buffer是因为它也占用了系统存储空间的一部分,是一块包含屏幕显示信息的缓冲区。Framebuffer借助于Linux文件系统向上层应用提供了统一而高效的操作接口,让用户空间运行的程序比较容易地适配多种显示设备。Android系统中,每个显示屏被抽象为一个帧缓冲区,注册到Fra...

weixin_31689651的博客 719

转android gralloc流程分析for msm8960

原文转载自http://blog.youkuaiyun.com/g_salamander/article/details/8424334 增加了Gralloc模块的平台背景和功能概述部分。 对原文针对msm8960 android display做了修正。 增加了Surfaceflinger初始化FrameBufferNativeWindow的代码部分。 平台中内存有ashmen、PMEM等多种内存类

强强的专栏 2847

Android Gralloc模块分析

Galloc模块是显示框架的硬件抽象层,

姥姥教我学编程 2868

GUI显示系统之SurfaceFlinger--- Gralloc与Framebuffer

GUI显示系统之SurfaceFlinger其它部分完整章节:http://blog.youkuaiyun.com/uiop78uiop78/article/details/8954508第1章  GUI系统之SurfaceFlinger在进入GUI系统的学习前,建议大家可以先阅读本书应用篇中的“OpenGLES”章节,并参阅OpenGL ES官方指南。因为Android的GUI系统是基于OpenGL/EGL

林学森的技术专栏 1万+

【Android】Android SurfaceFlinger之Gralloc

1、SurfaceFlinger模块Android中SurfaceFlinger与其它模块的关系图如下所示:上图中,最底层的是Linux内核提供的framebuffer显示驱动,设备节点为/dev/graphics/fb*或/dev/fb*,其中fb0表示第一个monitor。HAL层提供了Gralloc和Composer,其中Gralloc包括fb和gralloc两个设备,fb负责打开内核中的fr

Making Life Better. Making Others Better. 4889
下一篇: 算法:递归解序列中最长递减子序列
span76
博客等级 码龄18年 117粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值