文章目录
概览
-
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;