mtk6589显示子系统笔记(一)
拿到MT6589的版本不久,发现显示系统代码结构改变很大。做些备忘,后续不忙的时候可以继续看。
MT6589之前的MTK的Android系统显示系统同featurePhone基本一致。
先来回顾下MTK之前版本的大致结构,每个Video层,每个UI层 分别对应一个layer,再通过设置一些,区域坐标,透明度,通透色等,然后启动显示模块的DMA,实现各layer的数据的叠加,。如果是CPU接口的屏,合并后的数据往 GRAM刷,如果是RGB接口的数据,那么往DDR内存中的显存刷,然后RGB控制器自动从显存来取。
MT6589平台,把显示系统分成很多模块。
包括,rotator模块,scaler模块,gamrer模块,RDMA模块,WDMA模块,BLS模块。
各种LCD接口模块(DPI,DBI, DSI)。
各个模块的功能从名字上就可以看出来。
无非就是颜色转换,角度转换,数据叠加等。每个模块的具体功能和寄存器数据手册上写的很详细。暂时没有必要去详细了解。
当前目的是先了解框架,以后有问题可以定位再深入。
如上图就是整个显示子系统的框图。上图中的蓝色箭头指向内存。
其中 :RDMA用来准备数据给DPI DSI DBI接口引擎(顾名思义read DMA)
rdma 输入支持两种模式:
1. direct link input mode :指的是RDAM的数据源是上级的子模块(例如overlayer 模块)
2. memory link input mode: 指的是RDAM的数据来自内存。
rdma 的输出都是给显示接口DPI 、DSI 或者DBI。
-------
MT6589有两个RDMA。
RDMA0支持从内存输入和输出给显示接口
RDMA1只支持内存输入。
如上图中的红色虚线框部分为RDMA
------------------------------
WDMA: Write DMA 。从框图可以看到都是将前面几个模块产生显示buffer 写入到内存中的。
BLS : 自动背光调节,根据显示的数据来决定给背光占空比的一种方式,可以节省电源消耗,例如黑色部分可以降低背光亮度。省电。
overlayer : 从内存中或者前级模块的输出通过透明度、区域设置、等叠加,输出为一个显存。 这个也是核心部件。
2 。
再来分析如何使用这些模块刷新一个图片。 按照惯例,boot 模块(LK)只是刷一个logo,代码会比较简单,方便了解简单使用流程,后续有空再看kernel .
初始化
Platform.c (bootable\bootloader\lk\platform\mediatek\mt6589\lk)
--》void platform_early_init(void)
首先找到显示系统要用地址:(从下面可以看到和以前平台一样把内存中最后一段区域的作为显存)
---------------------
下面就是调用显示初始化:
Platform.c (mediatek\platform\mt6589\lk) --
从这里可以知道lk部分的显示路径
从显示内存(写提示符号的层和显示logo的层)两层通过overlay模块输出
overlay输出作为显示子系统的输入。
以上通过disp_path_config(&config)函数把参数设置到寄存器
上面都是都是CPU断的初始化。
最后初始化屏的寄存器。
lcm_drv->init()
--------------------
再看主要的函数 disp_path_config
具体如下:
1. 首先处理各个模块的冲突以及互斥,这个不影响主流程,以后再看
2. 根据输出路径配置寄存器。
pConfig->dstModule
从这里可以看出显示系统输出逻辑上支持的五种情况。
DISP_MODULE_DSI_VDO
DISP_MODULE_DPI0
DISP_MODULE_DBI
DISP_MODULE_DSI_CMD
DISP_MODULE_WDMA1
从直观上看前四个就是显示的接口,
最后一种WDMA是将显示系统的数据输出到内存。支持过滤,抖动,色域转换。
路径配置的核心部分:
这部分注释已经很明确了,再根据显示子系统系统模块图就很清晰。
可以看到,如果要刷到屏上的话,都是通过:
OVERLAYER模块à经过BLS模块RDMA0模块 相应的显示接口模块
3. 配置overlayer. (既然显示部分都来自overlay)
综上:这个函数支持3种路径
1. mem->ovl->wdma1->mem
2. ovl->bls->rdma0->lcd --- LK里面只用了这个模式
3. mem->rdma->lcd --对于这种,前面没提到补充下srcModule
pConfig->srcModule=DISP_MODULE_RDMA0
-----------
初始化完了之后:
再来看如何第一次刷屏。
从这里看到LK里面 DPI刷屏比较简单,仅仅是重新设置了一下overlayer 参数。
mtk6589显示子系统笔记(一)的更多相关文章
- 基于PCIe的多路视频采集与显示子系统
基于PCIe的多路视频采集与显示子系统 1 概述 视频采集与显示子系统可以实时采集多路视频信号,并存储到视频采集队列中,借助高效的硬实时视频帧出入队列管理和PCIe C2H DMA引擎, ...
- Linux Graphic DRI Wayland 显示子系统
转:https://blog.csdn.net/u013165704/article/details/80709547 1. 前言 上篇文章(Linux graphic subsytem(1)_概述) ...
- framebuff 显示子系统
#include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <linux/fb.h ...
- Android笔记——Android框架
本篇将站在顶级的高度--架构,来看android.我开篇就说了,这个系列适合0基础的人且我也是从0开始按照这个步骤来 学的,谈架构是不是有点螳臂挡车,自不量力呢?我觉得其实不然,如果一开始就对整个an ...
- 【转】寻找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) (v1.0) (
原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b57.html 寻找最好的笔记软件:三强篇(EverNote.Mybase.Surfulater) ...
- 《第一行代码》学习笔记1-Android系统架构
1. 2003.10,Andy Rubin创办Android公司.2005.8,Google收购之,并于2008年推出Android系统第一个版本. 2. ①Linux Kernel:基于Linux ...
- Android学习笔记__1__Android体系架构
Android 体系结构图 Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application).根据Android的软件 ...
- 【原创】菜鸟版Android 笔记1- Android架构和Application
Android架构 图1 Android架构自上而下名称为应用层.应用框架层.运行库和Adroid虚拟机层. Linux内核层. 1. 应用层 应用层像一座大厦里面的砖瓦.我们所做的开发基本上都在应用 ...
- 【转】Android开发学习笔记(一)——初识Android
对于一名程序员来说,“自顶向下”虽然是一种最普通不过的分析问题和解决问题的方式,但其却是简单且较为有效的一种.所以,将其应用到Android的学习中来,不至于将自己的冲动演变为一种盲目和不知所措. 根 ...
随机推荐
- SPOJ 7001 VLATTICE【莫比乌斯反演】
题目链接: http://www.spoj.com/problems/VLATTICE/ 题意: 1≤x,y,z≤n,问有多少对(x,y,z)使得gcd(x,y,z)=1 分析: 欧拉搞不了了,我们用 ...
- Linux VFS
翻译自Linux文档中的vfs.txt 介绍 VFS(Virtual File System)是内核提供的文件系统抽象层,其提供了文件系统的操作接口,可以隐藏底层不同文件系统的实现. Directir ...
- iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)
这片文章也有塞尔维亚-克罗地亚语(由Jovana Milutinovich翻译)和日语(由@noradaiko翻译) 如果有个一个网络库能够自动的为你处理cache该有多好啊. 如果有一个网络库能够在 ...
- Android Glide源码分析
1. 功能介绍 图片加载框架,相对于UniversalImageLoader,Picasso,它还支持video,Gif,SVG格式,支持缩略图请求,旨在打造更好的列表图片滑动体验.Glide有生命周 ...
- 【springcloud】使用@FEIGNCLIENT时,报JAVA.LANG.NOCLASSDEFFOUNDERROR: FEIGN/FEIGN$BUILDER错
引用地址:http://www.cnblogs.com/ellacan/p/8822374.html 错误信息: Caused by: java.lang.ClassNotFoundException ...
- 【java】httpclient的使用之java代码内发送http请求
场景: 需要本项目发送HTTP请求到另一个项目中,处理完成返回值给本项目. 1.本项目引入架包 <!-- httpclient 后台发送http请求--> <dependency&g ...
- java单测时的等待模块awaitility
单测时,可以用来等待异步任务完成 在编写自动化测试用例过程中,往往会遇见被测代码有异步或者队列处理的中间过程:如果需要校验这部分结果,必须等待异步操作结束或队列消费完,而这个中间等待的时间是不确定的, ...
- Testing Is the Engineering Rigor of Software Development
Testing Is the Engineering Rigor of Software Development Neal Ford DEVELOPERS LOVE TO USE TORTURED M ...
- [Django] 查看orm自己主动运行的原始查询sql
django的文档看了非常多.也用了不少,有的时候感觉性能非常不好,知道非常多地方是惰性查询.可是对于复杂的逻辑.仅仅是表面上发现执行非常慢,机器资源消耗非常多.却不知道orm究竟是什么来转化成sql ...
- thrift的使用及遇到的问题
centos 系统安装官方文档:http://thrift.apache.org/docs/install/centos 一.按该文档安装出现了一系列的问题,记录如下: 1.安装thrift时./bo ...