android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析

android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析

ID:9212649

大小:572.47 KB

页数:37页

时间:2018-04-22

android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析_第1页
android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析_第2页
android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析_第3页
android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析_第4页
android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析_第5页
资源描述:

《android帧缓冲区(frame buffer)硬件抽象层(hal)模块gralloc的实现原理分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Android帧缓冲区(FrameBuffer)硬件抽象层(HAL)模块Gralloc的实现原理分析分类:Android2012-07-2301:251529人阅读评论(16)收藏举报前面在介绍Android系统的开机画面时提到,Android设备的显示屏被抽象为一个帧缓冲区,而Android系统中的SurfaceFlinger服务就是通过向这个帧缓冲区写入内容来绘制应用程序的用户界面的。Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作。本文将详细分析Gralloc模块的实现,为后续分析SurfaceFlinger服务

2、的实现打下基础。在前面Android系统的开机画面显示过程分析一文中提到,Linux内核在启动的过程中会创建一个类别和名称分别为“graphics”和“fb0”的设备,用来描述系统中的第一个帧缓冲区,即第一个显示屏,其中,数字0表示从设备号。注意,系统中至少要存在一个显示屏,因此,名称为“fb0”的设备是肯定会存在的,否则的话,就是出错了。Android系统和Linux内核本身的设计都是支持多个显示屏的,不过,在Android目前的实现中,只支持一个显示屏。在前面Android系统的开机画面显示过程分析一文中还提到,init进程在启动的过程中,会启动另外一个进程

3、ueventd来管理系统的设备文件。当ueventd进程启动起来之后,会通过netlink接口来Linux内核通信,以便可以获得内核中的硬件设备变化通知。而当ueventd进程发现内核中创建了一个类型和名称分别为“graphics”和“fb0”的设备的时候,就会这个设备创建一个/dev/graphics/fb0设备文件。这样,用户空间的应用程序就可以通过设备文件/dev/graphics/fb0来访问内核中的帧缓冲区,即在设备的显示屏中绘制指定的画面。注意,用户空间的应用程序一般是通过内存映射的方式来访问设备文件/dev/graphics/fb0的。Androi

4、d系统定义了硬件抽象层模块的编写规范,具体可以参考Android硬件抽象层(HAL)概要介绍和学习计划一文。本文假设读者已经熟悉Android系统的硬件抽象层编写规范,因此,我们将按照帧缓冲区的使用情景以及硬件抽象层编写规范来介绍Gralloc模块的实现。用户空间的应用程序在使用帧缓冲区之间,首先要加载Gralloc模块,并且获得一个gralloc设备和一个fb设备。有了gralloc设备之后,用户空间中的应用程序就可以申请分配一块图形缓冲区,并且将这块图形缓冲区映射到应用程序的地址空间来,以便可以向里面写入要绘制的画面的内容。最后,用户空间中的应用程序就通过f

5、b设备来将前面已经准备好了的图形缓冲区渲染到帧缓冲区中去,即将图形缓冲区的内容绘制到显示屏中去。相应地,当用户空间中的应用程序不再需要使用一块图形缓冲区的时候,就可以通过gralloc设备来释放它,并且将它从地址空间中解除映射。接下来,我们就按照上述使用情景来分析Gralloc模块的实现。1.Gralloc模块的加载过程。每一个HAL模块都有一个ID值,以这些ID值为参数来调用硬件抽象层提供的函数hw_get_module就可以将指定的模块加载到内存来,并且获得一个hw_module_t接口来打开相应的设备。Gralloc模块的ID值定义在hardware/li

6、bhardware/include/hardware/gralloc.h文件中,如下所示:[cpp]viewplaincopy1#defineGRALLOC_HARDWARE_MODULE_ID"gralloc"函数hw_get_module实现在hardware/libhardware/hardware.c文件中,如下所示:[cpp]viewplaincopy2/**Basepathofthehalmodules*/3#defineHAL_LIBRARY_PATH1"/system/lib/hw"4#defineHAL_LIBRARY_PATH2"/vendo

7、r/lib/hw"56/**7*Thereareasetofvariantfilenameformodules.Theformofthefilename8*is".variant.so"sofortheledmoduletheDreamvariants9*ofbase"ro.product.board","ro.board.platform"and"ro.arch"wouldbe:10*11*led.trout.so12*led.msm7k.so13*led.ARMV6.so14*led.default.so15*/1617staticco

8、nstchar*vari

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。