参考:

对fb.h fbmen.c board文件和panel驱动的详细代码分析:

基于S3C2440的嵌入式Linux驱动——Framebuffer子系统解读

linux LCD驱动(1-4)--硬件分析

高通和android下的代码分析:

Android display Path analysis

android framebuffer driver 小结[msm7627为例]

数据流分析:

使用过Linux framebuffer的人都知道,我们需要在屏幕上显示一幅图像时,只需要将framebuffer mmap到用户空间,然后直接写这块内存即可,操作的结果会立即反映在display上。作为分析Android display path的基础知识,我先来讲讲Linux这部分的原理,如下图所示:

MDP会以一个固定的刷新率取得framebuffer中的数据送往panel,只要我们更新了framebuffer, 更新的内容会在一个刷新周期内反映在panel上。同时,Linux display path还支持可选的pan_display操作,减少刷屏的抖动问题。原理是当前显示的framebuffer并不是用户操作的framebuffer,待用户更新完back framebuffer后,调用pan_display,使得front framebuffer和back framebuffer调换,并强制刷新。

接着我们来分析一下Android中的display path,Android 区别于Linux,它强制定义了两倍于屏幕大小的framebuffer用于display(也就是双buffer,一个用于接收数据,一个用于传输数据到panel,二者轮流调换角色)。每次需要更新panel的数据时,都会调用ioctl()函数重新设置DMA的寄存器,指定当前的framebuffer偏移地址。另外,整个display path也做了很大的变动,如图所示:

FramebufferAPI不再是对MDP DMA hal驱动的简单包装,进一步封装了MDP PPP hal驱动,buffer中的数据首先经过MDP PPP,完成图像的缩放/de-interlace/csc等操作后放入framebuffer,之后由MDP DMA写入lcd.

android framebuffer及panel注册过程:

首先,在board.c文件里会注册panel/lcdc/mdp/framebuffer四个devices, 然后从panel的驱动初始化函数开始,做init,然后注册panel的驱动,如果驱动的name和device的name match上,则调用panel的probe函数,在该函数里会重新注册一个LCDC 设备。

接着,在LCDC的驱动初始化函数中,会注册LCDC的驱动,如果驱动的name和device的name match上,则调用LCDC的probe函数,在该函数里会重新注册一个MDP设备。

在MDP的驱动初始化函数中,会注册MDP的驱动,如果驱动的name和device的name match上,则调用framebuffer的probe函数,在该函数里会完成整个framebuffer的设置。

基本的framebuffer驱动注册过程就是这样,参数从panel开始,一步一步的传递到framebuffer.当用户调用framebuffer驱动时,函数调用一步一步的传递下去。

更多相关文章

  1. AsyncTask研究(以Android(安卓)10.0为准)
  2. android frida 检测_Android逆向之hook框架frida篇
  3. Android开发新选择:Kotlin
  4. android5.0以上实现录屏功能,并将录屏内容在相册中显示!(unity调用a
  5. Unity同步/异步调用Android的方法实例
  6. 高通Android智能平台环境搭建_编译流程分析
  7. Android(安卓)WIFI模块解析
  8. Android(安卓)init 启动过程分析
  9. 箭头函数的基础使用

随机推荐

  1. Android自带音乐播放器代码分析(2)
  2. Android:serializable和parcelable
  3. Android(安卓)使用ORMLite打造万能泛型Da
  4. Android(1)
  5. Android设计模式系列-组合模式
  6. andorid自定义progress
  7. 布局优化:使用include、merge、ViewStub
  8. 从Eclipse迁移代码到Android(安卓)Studio
  9. Android 3D 游戏开发教程– Part I-VI
  10. Android中所有API和对应权限的数据结构构