免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1858 | 回复: 0
打印 上一主题 下一主题

[Android] 关于android显示子系统的认识 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-04 15:58 |只看该作者 |倒序浏览
关于android显示子系统的认识之一


在网上有很多经典的教程,说android显示,
自己写出来,只是想沉淀一下自己的项目中的经历,
或者是说说自己的一家一言,如果你发现我的思路有瑕疵,或有更好的想法表述,请告诉我哈。

版本以:android 2.2 为例
         关于架构,一句话, 无处不在的层的思想。
看了那张经典的狗狗出的android架构图,我认为不过:
App -->framework --> 库 (静态库,动态库)-->HAL-->KERNEL
做开发,弄懂前2层,
如果做移植,至少后两层,多则整个数据流都要懂。

就拿显示子系统来说:
APP-->framework-->surfaceFlinger-->HAL (GRALLOC)
     -->frambuffer drvier(接口)-->显卡驱动-->LCD驱动


关于android显示子系统的认识之2
关键词 :framebuffer, HAL

先说framebuffer帧缓冲。
用这个驱动接口,coder不用关心显存具体的硬件位置,换页.

还有framebuffer设备其实是一个字符设备。
因此我们可以用 read ,write ,mmap等io操作控制他,还有ioctl,这个操作可以用来获取固定参数,比如屏幕大小、分辨率,比如设置屏幕的rgb格式。

framebuffer最重要的数据结构有3个,
frame_fix_screeninfo frame_var_screeninfo fb_info //fb.h中定义

前两个,一个用于获取固定的硬件信息,另外一个设置可变的。话说回来,那些ioctl操作其实就是给这些数据结构打交道的。
最后fb_info这个只能被内核访问,用来具体执行各种操作。


再说第二个关键词: HAL.
话说弄出这个抽象层,是各个厂商为了保护自己的知识财产。
我最直接的感受是:
显示系统的HAL的主要功能函数都是动态库加载的, 关于hal其他之处,暂时没有特别的感受。


关于android显示子系统的认识之3
关键词:刷屏操作。

这里刷屏,我没有分开说 是 文字,是bitmap,还 是矩形。
其实很多显示系统上,我看到的,对于单独的矩形,文字,有更好的优化。

1)打开 设备 , /dev/fb    (android下是/dev/graphic/fb0)
2)用ioctl获取屏幕参数,分辨率等,由得到参数可以计算显存大小(其实是屏幕大小的2倍)
3)将缓冲区映射到用户空间//mmap
4)直接读写帧缓冲区

代码位置:android2.2这个部分主要在 fb_post函数中 (散落在gralloc中)




关于android显示子系统的认识之4-浅谈Surfaceflinger

Surfaceflinger ,位置是framework以下,libraries中
作用是:对屏幕上的多个应用程序(准确是surface) 管理显示、存取和互动操作,还要管理2d、3d的合成。

具体到管理对象,每一个程序对应一个surface
//其实anroid外,stlinux中的显示系统对应的有layer,其实我感觉就是一图层罢了。

说到surface,不得不提到双缓冲,其实双缓冲指的是
一个surface,2个buffer,分别是front,back,用户看到的是front,当有数据更新时,写道back,需要显示时,front,end交换就是。

再补充一点,所有的app与surfaceflinger如何通信,答曰binder,其实这是典型的c/s架构,surfacefinger相当于其中的server,而每个app都是client.

如上,是我对surfaceflinger的理解,感觉很浅,只是说到表面,当感觉对于理清楚app与Surfaceflinger 的关系,八九不离十了吧。


关于android显示子系统的认识之5-gralloc
关于gralloc,我认为这是framebuffer刷到显示设备的过程。这里面抽象、联系的东西比较多,就下次说吧。
(待补充)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP