Android 帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc 的实现原理分析分类:Android 2012-07-23 01:251529 人阅读评论(16)收藏举报前面在介绍Android 系统的开机画面时提到,Android 设备的显示屏被抽象为一个帧缓冲区,而Android 系统中的SurfaceFlinger服务就是通过向这个帧缓冲区写入内容来绘制应用程序的用户界面的
Android 系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作
本文将详细分析Gralloc模块的实现,为后续分析SurfaceFlinger服务的实现打下基础
在前面Android 系统的开机画面显示过程分析一文中提到,Linux 内核在启动的过程中会创建一个类别和名称分别为“graphics”和 “fb0”的设备,用来描述系统中的第一个帧缓冲区,即第一个显示屏,其中,数字0表示从设备号
注意,系统中至少要存在一个显示屏,因此,名称为“fb0”的设备是肯定会存在的,否则的话,就是出错了
Android 系统和Linux 内核本身的设计都是支持多个显示屏的,不过,在Android 目前的实现中,只支持一个显示屏
在前面Android 系统的开机画面显示过程分析一文中还提到,init进程在启动的过程中,会启动另外一个进程ueventd 来管理系统的设备文件
当ueventd 进程启动起来之后,会通过netlink接口来Linux内核通信,以便可以获得内核中的硬件设备变化通知
而当ueventd 进程发现内核中创建了一个类型和名称分别为 “graphics”和 “fb0”的设备的时候,就会这个设备创建一个/dev/graphics/fb0设备文件
这样,用户空间的应用程序就可以通过设备文件/dev/graphics/fb0来访问内核中的帧缓冲区