博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux的LCD驱动分析
阅读量:2238 次
发布时间:2019-05-09

本文共 1152 字,大约阅读时间需要 3 分钟。

本文主要介绍了LinuxLCD驱动设计的模型,如果读者想了解Linux下的图形架构,请关注我的另一篇博文《》。
一、LCD介绍

    Liquid Crystal Display液晶显示器,LCD按材料分有:STN(超扭曲阵列),TFT薄膜晶体管,LTPS(低温晶体多晶硅),OLED(有机发光二极管)等。LCD的接口种类有:TTLRGB(数字RGB颜色接口),i80(又称MCU接口),LVDS(低压差分信号),RSDS(低摆幅差分信号),EDP(嵌入式显示接口),MIPIDSIMIPI标准显示接口)等,其各种接口和LCD控制器及CPU的关系如下图所示:

二、LinuxLCD驱动架构

   Linux为所有的LCD及显示器提供了统一的驱动模型FrameBuffer,其抽象的屏蔽掉了不同显示设备硬件的差异性,为用户提供统一的显示屏操作视角(/dev/fbx),应用程序可以通过打开读写此设备文件而将视频及图像数据输出到显示设备上。下图是LinuxFrameBuffer的架构:

FrameBuffer只是提供了统一的LCD驱动设计模型,而具体的液晶屏显示、控制、参数设置等则需要具体的LCD控制器驱动完成,而对于LCD驱动开发者来说,FrameBuffer已经由内核完成了,其主要工作就是进行LCD控制器驱动设计。LCD控制器驱动和FrameBuffer主要通过structfb_info数据结构进行协作,该数据结构主要包含了以下重要成员:

  • fb_var_screeninfo:描述了fb的可变参数,如宽、高、颜色深度等。
  • fb_fix_screeninfo:定义了fb的固定参数,如framebuffer内存的起始地址,地址长度等;
  • fb_cmap:颜色表信息,可以通过ioctlFBIOGETCMAPFBIOPUTCMAP命令访问;
  •   fb_ops:定义的方法用于支持对LCD控制器的操作;

三、LinuxLCD驱动实现

对于当前大多数开发板,其LCD控制器驱动都是通过platform总线进行挂载的,在platform总线的probe函数中完成fb_info结构的设置及注册、LCD控制器的初始化等工作,其流程如下图所示:

LCD驱动开发需要重点完成的是structfb_ops的接口函数实现,这些接口函数是实现用户可以控制LCD硬件的基础。比如应用程序在调用ioctl(fbx)进行液晶屏设置操作,其最终会调用fb_ops->fb_ioctl()函数,其调用流程图如下图所示:

对于TTL RGB接口的液晶屏,做完上述工作,LCD驱动程序基本就完成了,但对于LVDSMIHIDSI接口的液晶屏,从之前的LCD接口图可以看出,还需要完成LVDSDSI接口控制器的驱动,LCD才能工作。

你可能感兴趣的文章
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
关于PHP几点建议
查看>>
硬盘的接口、协议
查看>>
VLAN与子网划分区别
查看>>
Cisco Packet Tracer教程
查看>>
02. 交换机的基本配置和管理
查看>>
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>