第18章 LCD设备驱动

来源:互联网 发布:微信公众源码 编辑:程序博客网 时间:2024/05/16 19:01

本文摘自(偶有较小改动)《Linux 设备驱动开发详解》(宋宝华 编著;人民邮电出版社;),留作纪念。
——Living Park

18 LCD设备驱动

18.1 LCD硬件原理

       利用液晶制成的显示器称为LCD,依据驱动方式可分为静态驱动/简单矩阵驱动以及主动矩阵驱动3.其中,简单矩阵型又可再细分扭转向列型(TN)和超扭转向列型(STN)两种,而主动矩阵型则以薄膜式晶体管型(TFT)为主流。

18.2 帧缓冲

18.2.1 帧缓冲的概念

       帧缓冲是Linux系统为显示设备提供的一个接口。

       帧缓冲设备为标准字符设备,主设备号为29,对应于/dev/fb%d设备文件。另外,通过帧缓冲可支持汉字点阵的显示,因此帧缓冲也成为Linux汉化的可行方案。

18.2.2 显示缓冲区与显示点

       在不同的色彩模式下,显示缓冲区和屏幕上的显示点有不同的对应关系。

18.2.3 Linux帧缓冲相关数据结构与函数

       帧缓冲设备最关键的一个数据结构体是fb_info结构体,FBI中包括了关于帧缓冲设备属性和操作的完整描述。

       FBI的成员变量fbops为指向底层操作的函数的指针,这些函数是需要驱动程序开发人员编写的。

       fb_bitfield结构体描述每一像素显示缓冲区的组织方式,包含位域偏移、位域长度和MSB指示。

       fb_cmap结构体记录设备无关的颜色表信息。

       作为一种字符设备,帧缓冲设备的文件操作结构体定义于/linux/drivers/vedio/fbmem.c文件中。帧缓冲设备驱动的文件操作接口函数已经在fbmem.c中被统一实现,一般不需要由驱动工程师再编写。

       注册与注销帧缓冲设备:register_framebuffer(),unregister_framebuffer()

18.3 Linux帧缓冲设备驱动结构

18.4帧缓冲设备驱动的模块加载与卸载函数

       模块加载函数中完成如下工作。

l       申请FBI结构体的内存空间,初始化FBI结构体中固定和可变的屏幕参数。

l       根据具体LCD屏幕的特点,完成LCD控制器硬件的初始化。

l       申请帧缓冲设备的现实缓冲区空间。

l       注册帧缓冲设备。

模块卸载函数完成相反工作。

18.5帧缓冲设备显示缓冲区的申请与释放

       在嵌入式系统中,一种常见的方式是直接在RAM空间中分配一段显示缓冲区。通过dma_alloc_writecombine()分配的显示缓冲区不会出现cache一致性问题。

18.6帧缓冲设备的参数设置

18.6.1 定时参数

18.6.2 像素时钟

18.6.3 颜色位域

18.6.4 固定参数

18.7帧缓冲设备的fb_ops成员函数

18.8 LCD设备驱动的读写、mmapioctl函数

18.9帧缓冲设备的用户空间访问

       通过/dev/fbns,应用程序可进行的针对帧缓冲设备的操作主要有如下几种。

/dev/fbn;映射操作;I/O控制。

18.10 Linux图形用户界面

18.10.1 Qt-X11/QtEmbedded/Qtopia

       QtTrolltech(奇趣)公司所开发的一个跨平台的FrameWork环境。

       信号和插槽是Qt中非常有特色的地方,是Qt编程区别于其它编程的标志。

18.10.2 Microwindows/Nano-X

       Microwindows的核心基于显示设备接口,因此可移植性很好。

       Microwindows采用分层设计方法。

18.10.3 MiniGUI

       MiniGUI是由北京飞漫软件技术有限公司开发的面相实时嵌入式系统的轻量级图形用户界面支持系统。

       MiniGUI下的通信是一种类似于Win32的消息机制,如果有WIN32图形用户界面程序的编程基础,编写MiniGUI程序将没有门槛。

18.11 实例:S3C2410LCD设备驱动

18.11.1 S3C2410 LCD控制器硬件描述

       S3C2410内部集成了LCD控制器,它支持STNTFT屏。

18.11.2 S3C2410 LCD驱动的模块加载与卸载函数

       S3C2410中,作为一个相对独立的硬件单元,LCD控制器被认定为平台设备,因此,在驱动的模块加载和卸载函数中,分别注册和注销对应的platform_driver即可。

18.11.3 S3C2410 LCD驱动的的探测与移除函数

18.11.4 S3C2410 LCD驱动挂起与恢复函数

       如果内核配置了能量管理(即定义了CONFIG_PM),平台驱动部分应该增加挂起和恢复函数。

18.11.5 S3C2410 LCD驱动的fb_ops成员函数


原创粉丝点击