【Android GUI】从总体上了解Android的GUI体系

本文详细解析了Android系统中的HAL层如何通过Gralloc管理Framebuffer,介绍了Gralloc模块的加载过程,以及其提供的接口如open、alloc和free。重点讨论了Android原生Gralloc的实现,包括与Framebuffer设备的交互和内存映射,以及与VSync和EGL的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概览

在这里插入图片描述

  • Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*,其中fb0表示第一个Monitor。

  • Android的HAL层提供了Gralloc,包括fb和gralloc两个设备。fb负责打开内核的framebuffer、初始化配置。gralloc管理帧缓冲区的分配和释放。所以上层只需要通过Gralloc来间接访问帧缓冲区,来保证对framebuffer的统一管理。

  • HAL层的composer为UI合成提供接口,被surface flinger调用。

  • VSync是“Project Butter”加入的同步机制,可以通过硬件产生,也可以通过软件,即VSyncThread模拟。

  • OpenGL ES 是一个通用函数库,需要和具体平台建立关联才可以工作。

  • FramebufferNativeWindow负责OpenGL ES在Android平台本地化的中介之一

  • EGL为OpenGL ES配置本地窗口。

Android硬件接口HAL

HAL是Android很多子系统,例如显示系统、音频系统等和Linux kernel驱动之间通信的统一接口。

Gralloc与Framebuffer

Framebuffer是内核系统提供的图形硬件的抽象描述,它占用了系统存储空间的一部分,是一块包含屏幕显示信息的缓冲区。
Android中,Framebuffer提供的设备文件节点是/dev/graphics/fb*

Android的显示系统借助于HAL层的Gralloc操作帧缓冲区。

Gralloc模块的加载

Gralloc对应的模块是由FramebufferNativeWindow在构造函数中加载的。

hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
#define GRALLOC_HARDWARE_MODULE_ID "gralloc"

hw_get_module查找和ID值匹配的库:

#define HAL_LIBRARY_PATH1 "/system/lib/hw"
#define HAL_LIBRARY_PATH2 "/vendor/lib/hw"

lib库的命名形式:

gralloc.[ro.hardware].so
gralloc.[ro.product.board].so
gralloc.[ro.board.platform].so
gralloc.[ro.arch].so

默认的:

    gralloc.default.so

Gralloc提供的接口

/*hardware/libhardware/include/hardware/Hardware.h*/
typedef struct hw_module_t {
   
   struct hw_module_methods_t* methods;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员-薯片

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值