下面文章很有参考意义:

参考:

对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也做了很大的变动,如图所示:

     Framebuffer API不再是对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. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)浅析 EventBus (二) 原理
  5. Android(安卓)怎么把GMT+8.0转化为UTC时间
  6. menu.addIntentOptions 添加动态菜单
  7. Android之Sax解析xml(4)
  8. [Android]使用Dagger 2依赖注入 - 图表创建的性能
  9. Android全局异常捕获

随机推荐

  1. 舒尔特方格系列一『Android趣味项目』
  2. Android(安卓)使用【AIDL】调用外部服务
  3. Google本想借刀杀人,却用Android武装了敌
  4. Android:Touch事件拦截机制
  5. Android(安卓)4.1果冻豆新特性详解
  6. OOM原因和解决方案
  7. Android(安卓)实现对图片 Exif 的修改(And
  8. 【外刊IT评论网】有些软件很卖钱:在Androi
  9. android的帧布局,绝对布局,相对布局,表格布
  10. App模块化及工程扩展----- android