1、前言

在驱动开发中,我们往往需要适配一些新的屏幕或者调试一些屏幕的参数等,对于Qualcomm的MSM8909这款SoC,当启动Android系统时,会有一个LK阶段,该阶段用来启动Linux内核系统,本文,将简单介绍如何在MSM8909的LK阶段中如何进行LCM屏的兼容和适配流程,并对LK阶段中,LCD屏幕的初始化和显示流程进行简要分析。

2、LCM接口框图

下图为LCM的接口框图,屏幕的背光灯使用PWM波进行控制:

3、适配LCM屏幕

接下来,将基于MSM8909的Android系统平台,介绍如何在LK阶段适配一款LCM屏幕,使用GCDB工具生成屏幕的参数文件并借助于Qualcomm的LK驱动框架,能够很快速地完成适配,下面,简单给出大概流程。

首先进入Android源码根目录,找到GCDB工具相关的路径,并进入工具路径,运行下面命令:

$ cd msm8909_7./device/qcom/common/display/tools
$ cp panel_ili9881c_720p_video.xml panel_noname_720p_video.xml
$ vim panel_noname_720p_video.xml

然后,就是根据要适配的屏幕,去修改.xml中屏幕参数描述:

  • PanelID:将会生成kernel中的屏幕参数的设备树文件的名称;
  • PanelH:将会生成LK阶段的屏幕参数头文件。

接下来,修改panel的配置信息:

  • PanelName:LCM屏幕的名称;
  • PanelType:LCM屏幕的模式,0代表VIDEO_MODE,1代表COMMAND_MODE;
  • PanelOrientation:仅在LK阶段使用,1代表旋转0度,2代表旋转180度,如果默认不配置则代表旋转0度;
  • PanelFrameRate:表示屏幕每秒的刷新频率,例如56则代表56fps。

接下来,修改panel的分辨率配置信息:

  • PanelWidth:屏幕宽度的分辨率;
  • PanelHeight:屏幕高度的分辨率;
  • HFrontPorch:水平前廊值;
  • HBackPorch:水平后廊值;
  • HPulseWidth:水平脉冲宽度;
  • HSyncSkew:水平同步倾斜值;
  • VBackPorch:垂直后廊值;
  • VFrontPorch:垂直前廊值;
  • VPulseWidth:垂直脉冲宽度值。

接下来,则是修改panel的颜色信息配置:

  • ColorFormat:定义了每个像素点的位数;
  • ColorOrder:定义了在msm芯片和panel之间每位颜色系列的组成。

ColorFormat和ColorOrder值的含义如下:

接下来,则是panel命令的信息配置:

  • OnCommand:panel打开的命令字节数组,而命令的格式如下所示:
  • OffCommand:panel关闭的的命令字节数组;
  • OnCommandState:发送OnCommand时屏幕的状态,0代表DSI_LP_MODE模式,1代表DSI_HP_MODE模式;
  • OffCommandState:发送OffCommand时屏幕的状态。

对于命令的格式如下所示:

经常要修改的值为PayloadSize和Payload,如下:

接下来,修改panel在Video模式下的信息配置:

  • HSyncPulse:水平同步脉冲,它确定硬件是否发送水平同步脉冲在垂直消隐期间,0代表Sync Pulse不使能,1则代表使能;
  • TrafficMode:屏幕流量模式类型,0代表non burst with sync pulses,1代表non burst with sync start event,2代表burst mode。

接下来,则是修改dsi线相关的配置:

  • DSILanes:DSI通信的线路数量,4则代表了4组panel线路;
  • DSILaneMap代表了数据线是怎么映射到panel上的,它的值代表如下:
  • LaneNState(N:0-3):代表了线路N的状态,1代表使能,0代表不使能。

对于DSILaneMap的值含义如下所示:

接下来,则是panel的时序控制相关参数配置,需要使用Qualcomm提供的工具80-NH713-1_DSI.zip自动生成:

PanelTimings:代表了长度为12的字节数组,指定panel的时序配置;
TClkPost:DSI时序控制时钟的post值;
TClkPre:DSI时序控制时钟pre值。

接下来,则是panel的背光灯信息配置:

  • BLMinLevel:代表背光灯的最小值;
  • BLMaxLevel:代表背光灯的最大值;
  • BLPMICControlType:代表背光灯的控制类型,它的值代表如下:

通常情况下,一般都使用PWM来进行背光灯的控制。

根据要适配的LCM屏幕配置好.xml文件后,接下来,则是使用GCDB工具命令,生成屏幕配置参数的头文件和设备树文件,对于头文件,是在LK启动阶段使用的,设备树文件则是在Linux内核驱动中使用的,命令如下:

$ perl parser.pl panel_noname_720p_video.xml panel
$ ls -al panel_noname*

将会在当前目录下,自动生成的屏幕头文件和设备树文件:

# 屏幕配置参数头文件
panel_noname_720p_video.h # 屏幕配置的设备树文件
dsi-panel-noname-720p-video.dtsi

在本章节,只介绍在LK启动阶段中的适配,将相关的文件移动到对应使用的目录:

对于LK启动阶段中,使用下面命令:

$ mv panel_noname_720p_video.h ~/msm8909_7./bootable/bootloader/lk/dev/gcdb/display/include/

对于Linux内核驱动,使用下面命令:

$ mv dsi-panel-noname-720p-video.dtsi ~/msm8909_7./kernel/arch/arm/boot/dts/qcom/

重点来咯,接下来就是在LK的启动文件中,基于Qualcomm的软件驱动框架,修改对应的驱动文件,将屏幕适配,步骤如下:

编辑和修改oem_panel.c文件:

$ cd msm8909_7./bootable/bootloader/lk/target/msm8909
$ vim oem_panel.c

首先,是添加刚刚自动生成的屏幕配置头文件:

添加适配新屏幕的索引号,将通过该索引号选择相应的屏幕:

在panel_list中添加适配的新屏幕,该结构体表示目标板中支持的屏幕:

接下来,则是在init_panel_data()函数中添加新屏幕的配置参数,该函数用与初始化panel的参数配置:

最后,则是在oem_panel_select()函数中添加新屏幕的索引号,LK启动阶段将通过该函数进行屏幕的选择:

大概的修改步骤就描述完了,使用make aboot命令编译bootloader后,重新烧写即可。

4、小结

本文简单介绍了在MSM8909的Android平台中使用GCDB生成LCM屏的配置文件,并介绍了在LK启动阶段适配新屏幕的大概流程。

MSM8909中LK阶段LCM屏适配与显示流程分析(一)的更多相关文章

  1. MSM8909中LK阶段LCM屏适配与显示流程分析(二)

    1.前言 在前面的文章MSM8909中LK阶段LCM屏适配与显示流程分析(一),链接如下: https://www.cnblogs.com/Cqlismy/p/12019317.html 介绍了如何使 ...

  2. iOS 横竖屏适配 笔记

    研究消息转发机制 已经一周多了,但是 还是没整理出博客, 还是先写一个 项目中遇到的 横竖屏适配问题. // 开启自动转屏 - (BOOL)shouldAutorotate { return YES; ...

  3. mtk lk阶段的lcm流程

    一.lk进入kmain() 1. vendor/mediatek/proprietary/bootable/bootloader/lk/arch/arm/srt0.S bl kmain 二.初始化lk ...

  4. 移动端H5页面高清多屏适配方案

    背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范 ...

  5. Phonegap之ios对iPhone6和Plus的闪屏适配 -- xmTan

    故事的发生起于,由于老板强烈要求app在iPhone6和5有一样的工具栏,然后前端妹子用@media为iPhone6和Plus做了样式适配.然后问题来了,竟然奇葩的发现@media样式只对iPhone ...

  6. webapp:移动端高清、多屏适配方案(zz)

    来源: http://sentsin.com/web/1212.html 移动端高清.多屏适配方案 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉 ...

  7. 解惑好文:移动端H5页面高清多屏适配方案 (转)

    转自:http://mobile.51cto.com/web-484304.htm https://github.com/amfe/lib-flexible/blob/master/src/makeg ...

  8. 移动端高清、多屏适配方案 [来源:http://div.io/topic/1092]

    Lovesueee 发布于 8 月前 移动端高清.多屏适配方案 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视 ...

  9. [转]:移动端H5页面高清多屏适配方案

    原文链接:http://www.tuicool.com/articles/YJviea 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们 ...

随机推荐

  1. win7和win10自带桌面便签哪里找

    一些小伙伴习惯使用windows自带的便签功能,但win7和win10区别较大, 导致更新系统后不知道在哪里找,甚至以为没有该功能了, 其实不然,下面我总结了2种方法,希望能帮到有需要的人 win7( ...

  2. ajax运行原理

    Ajax应用程序的加载过程与传统的Web应用程序类似.某个用户操作引发浏览器的一次HTTP请求.服务器接收请求并处理这个请求,生成合适的执行结果发送至客户端.客户端浏览器经过处理将数据(HTML+CS ...

  3. netty ByteBuf与String相互转换

    String转为ByteBuf 1)使用String.getBytes(Charset),将String转为byte[]类型 2)使用Unpooled.wrappedBuffer(byte[]),将b ...

  4. Elasticsearch 6.x版本全文检索学习之分布式特性介绍

    1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...

  5. MongoDB 高级教程

    MongoDB 关系 MongoDB 的关系表示多个文档之间在逻辑上的相互联系. 文档间可以通过嵌入和引用来建立联系. MongoDB 中的关系可以是: 1:1 (1对1) 1: N (1对多) N: ...

  6. 致Python初学者的六点建议

    Python是最容易学习的编程语言之一,其语法近似英语.通常,初学者只会遇到一些小麻烦,如强制缩进.在函数中使用self等. 然而,当开始阅读.复制和编辑他人代码时,麻烦就接踵而至了. 这里,我将解释 ...

  7. ADB控制手机命令(adb命令)

    手机端配置tcp方式连接 su setprop service.adb.tcp.port 5555 stop adbd start adbd 首先使用管理员权限,然后打开监听5555端口 电脑端使用a ...

  8. momentjs在vue中的用法

    js代码 import moment from 'moment'; const jsCountDown = document.getElementById('js-countdown'); const ...

  9. shell脚本模板----自动生成开头注释信息

    每当我们新建一个shell脚本都要去写一些繁琐的注释信息,这会浪费掉我们很多的时间,有没有感觉很痛苦呢? 哈哈 下面给大家分享一个shell脚本的模板文件,把它拷贝到用户的家目录下并命名成  .vim ...

  10. 渗透测试学习 十九、 XSS跨站脚本漏洞详解 续2

    二阶注入环境搭建 74cms 3.4 直接将源码放在PHPstudy的www路径下,在地址栏中输入127.0.0.1回车 然后进入网站首页,在填写简历里面存在二阶注入 先注册一个账号 创建简历 前面的 ...