当前位置:首页 >> 信息与通信 >>

基于嵌入式Linux系统的LCD驱动实现_图文

您的论文得到两院院士关注 文 章 编 号 :1008-0570(2008)12-2-0001-03

嵌入式系统应用

基于嵌入式 Linux 系统的 LCD 驱动实现

Implementation of LCD driver based on embedded Linux

(北京大学) 宫 莉 莉 赵 勇
GONG Li-li ZHAO Yong

摘要: 本 文 首 先 介 绍 Linux 系 统 设 备 驱 动 的 特 点 , 然 后 以 S3C2410 平 台 为 硬 件 开 发 环 境 , 实 现 了 Linux2.6.14 系 统 下 LCD 显 示

设 备 的 驱 动 , 其 中 包 括 如 何 将 LCD 驱 动 程 序 添 加 到 Linux 内 核 配 置 系 统 中 。

关键词: 嵌入式 Linux; S3C2410 平台; 帧缓存; 设备驱动

中图分类号: TP311.52

文献标识码: B

Abstract: This article introduced the characteristic of Linux device driver, then accomplish LCD device driver in embedded Linux2.6.14 system based on the s3c2410 platform.The article also illustrated how to compile the LCD driver module. Key words: Embedded Linux; S3C2410 platform; Framebuffer; Device driver

引言
随着嵌入式技术的不断推广,Linux 操作系统以其多任务, 多用户,可定制的优势越来越多的被应用于嵌入式系统开发。 Linux 内核由大量复杂代码组成,设备驱动程序在 Linux 内核中 充当特殊的角色,它们好象一个个独立的“黑盒子”,使某个特 定硬件响应一个定义良好的内部编程接口,这个接口完全隐藏 了设备的工作细节。在应用程序看来,硬件设备只是一个设备 文件,可以像操作普通文件一样对硬件设备进行操作。用户的 操作通过一组标准化的调用执行。 本文将详细讨论在 Linux 操作系统下液晶显示屏的驱动程序的编写。
1 Linux 系统设备 驱动特点
Linux 系统将设备分成三种基本类型,字符设备、块设备、 网络接口设备。其中字符设备是个能够像字节流(类似文件)一 样被访问的设备,由字符设备驱动程序来实现这种特性;块设 备能够容纳文件系统。在大多数 Unix 系统中,进行 I/O 操作时 块设备每次只能传输一个或多个完整的块,每块包含 512 字节 (或 2 的更高次幂字节的数据)。块设备与字符设备的区别仅仅 在于内核内部管理数据的方式,也就是内核及驱动程序之间的 软件接口;任何网络事务都经过一个网络接口形成,即一个能 够和其他主机交换数据的设备。网络接口由内核中的网络子系 统驱动,负责发送和接收数据包,许多网络连接是面向流的,但 网络设备却围绕数据包的传输和接收而设计。网络驱动程序不 需要指导各个连接的相关信息,它只是处理数据包即可。
Linux 为所有的设备都提供了统一的操作函数接口。具体 通过使用数据结构 struct file_operations 来实现,该数据结构中 包括许多操作函数的指针,如 open(),close(),read(),write()
宫莉莉: 硕士研究生 基金名称: AVS-M 研究开发及其在 DSP 上的实现 颁发部门: 2006 年度深圳市科技计划研发基金 (20077975843)

技 等。由于 file_operations 结构中包含了所有可能对设备操作的函
数,如果这些函数全部由驱动开发人员编写实现,其工作量会
术 非常庞大。为了解决这个问题,Linux 设计者采用更高一层的封
装方法,为同一类设备定义了文件层次 file_operations 结构中的
创 接口函数,这些函数对同一类设备来说实现方式相同(如申请
缓冲区空间,读取缓冲区数据等操作),只将一小部分硬件设备
新 寄存器相关的操作函数留给驱动开发人员实现。即 Linux 内核
提供了一个文件操作层到底层设备驱动层的接口。 Linux 为 LCD 显示设备提供的帧缓冲驱动就是这种分层驱
动方式。事实上,Linux 内核在 fbmem.c(/drivers/video/fbmem.c) 文件中实现了几乎所有 file_operations 结构中的操作函数,它将 LCD 显示设备抽象成帧缓冲区(framebuffer),帧缓冲区可作为 出现在 Linux 内核中的一种驱动程序接口,用户可以将它看成 是显示内存的一个映像。它对应设备目录下的/dev/fb 设备节 点。每一个注册进 Linux 内核的 LCD 设备对应一个 fb 节点,如/ dev/fb0,/dev/fb1 等。/dev/fb 是对实际使用的 LCD 设备节点的 符号链接。在使用帧缓冲区时,Linux 将显卡置于图形模式下。
Linux 系统下 LCD 设备驱动的主要工作就是定义与具体硬 件寄存器相关的数据结构,然后注册这个设备为/dev/fb 下的一 个设备节点。

2 硬件平台

嵌入式微处理器采用 Samsung 公司的 S3C2410X。LCD 控 制器主要功能是用于传输显示数据和产生控制信号,用户只需 通过读写一系列寄存器即可完成配置和显示控制。图 2_1 是 S3C2410 平台 LCD 控制器模块图。
System Bus

REGBANK LCDCDMA

TIMEGEN LPC3600 VIDPRCS

VIDEO MUX

VCLK/LCD_HCLK VLINE/HSYNC/CPV
VFRAME/VSYNC/STV VM/VDEN/TP
......
VD[23:0]

图 2_1 S3C2410 LCD 控制模块图

《P LC 技术应用 200 例》

邮局订阅号:82-946 360 元 / 年 - 1 -

嵌入式系统应用

中文核心期刊《微计算机信息》(嵌入式与 S OC )2008 年第 24 卷第 12-2 期

2.1 S3C2410 平台 LCD 控制流程

图 2_1 中 ,S3C2410 平 台 的 LCD 控 制 器 由 REGBANK,

LCDCDMA,VIDPRCS,TIMEGEN 和 LPC2600 组 成 。 其 中

REGBANK 有 17 个可编程寄存器组和容量为 256×16 的调色板

存 储 器 , 可 用 来 设 定 LCD 控 制 器 ;LCDCDMA 是 一 个 专 用

DMA,用于自动从帧缓冲区传输视频数据到 LCD 控制器,通过

这个特殊的 DMA,视频数据可以不经过 CPU 处理就在显示屏

上显示;VIDPRCS 可接收从 LCDCDMA 传输的视频数据并将其

转换成适当的数据格式,然后经 VD[23:0]发送到 LCD 驱动器;

TIMEGEN 则由可编程逻辑组成,可支持不同 LCD 驱动器接口

时序和不同的速率,TIMEGEN 用于产生 VSYNC,HSYNC,VCLK

等时序信号。

FIFO 存储器通常位于 LCDCDMA。当 FIFO 为空或部分为

空时,LCDCDMA 要求从基于突发传输模式的帧缓冲区中取出

数据存入 FIFO,这个帧缓冲区的存储空间通常开设在 RAM

区。当这个传输请求被存储控制器中的总线仲裁器接收后,系

统存储器就给内部 FIFO 成功传输 4 个字。FIFO 的总大小是 28

个字,其中低位 FIFOL 是 12 个字,高位 FIFOH 是 16 个字。

S3C2410 有两个 FIFO,可支持双扫描显示模式。其中单扫描模

技 式下只使用一个 FIFOH。

2.2 LCD 控制器主要外部接口信号



* VFRAME/VSYNC/STV:帧同步信号(STN 屏)/ 垂直同步信

号(TFT 屏)/SEC TFT 信号。每一次完成一个完整帧的显示后 LCD

创 控制器会发出该信号,通知 LCD 显示屏开始新一帧的显示。

* VCLK/LCD_HCLK:像素时钟信号(STN/TFT 屏)。LCD 控
新 制器在 VCLK 的上升沿发送数据,LCD 驱动器在 VCLK 的下降

沿采样数据。

* VLINE/HSYNC/CPV:行同步脉冲信号(STN 屏)/水平同步

信号(TFT 屏)/SEC TFT 信号。LCD 控制器在一整行数据全部传

输到 LCD 驱动器后发出该信号。

* VM/VDEN/TP:LCD 驱动器的 AC 偏置信号 (STN 屏)/数

据使能信号(TFT 屏)/SEC TFT 信号。LCD 驱动器使用 VM 信号

改变用于打开或关闭像素的行和列电压的极性。

* VD[23:0]:LCD 像素数据输出端口。

2.3 LCD 控制寄存器

S3C2410 平台可支持 STN-LCD 和 TFT-LCD,本文中介绍

的是其对 TFT-LCD 的控制。S3C2410 的 LCD 控制寄存器主要

有 LCDCON1 寄 存 器 ,LCDCON2 寄 存 器 ,LCDCON3 寄 存 器 ,

LCDCON4 寄存器和 LCDCON5 寄存器。

正如上节 LCD 控制流程中介绍的一样,TIMEGEN 模块可

产生控制 LCD 驱动器的时序信号 (如 VSYNC,HSYNC,VCLK

等),这些时序信号由 REGBANK 寄存器组中的 LCDCON1/2/3/

4/5 寄存器值直接决定。基于 LCD 控制寄存器中的这些可编程

配置,TIMEGEN 便可产生可编程控制信号来支持不同类型的

LCD 驱动器。

因此,LCD 驱动程序中主要的一项工作就是正确配置 LCD

控制寄存器。

(1)VSYNC 和 HSYNC 脉冲信号的产生与 LCDCON2/3 寄

存 器 中 的 HOZVAL 域 和 LINEVAL 域 密 切 相 关 ,HOZVAL 和

LINEVAL 域的配置要根据具体 LCD 显示屏的尺寸而定:

HOZVAL = 水平显示尺寸 - 1

LINEVAL = 垂直显示尺寸 - 1

(2) VCLK 信号由 LCDCON1 寄存器的 CLKVAL 域控制,

它们之间的具体关系为:VCLK (Hz)= HCLK/([ CLKVAL + 1)×

2],其中 CLKVAL 可允许配置的最小值为 0,HCLK 为 AHB 总

线时钟频率。

(3) 帧频 率 几乎 与 每 个控 制 寄 存器 都 密 切 相 关 , 具 体 为

LCDCON1/2/3/4 寄 存 器 的 VSYNC,VBPD,VFPD,LINEVAL,

HSYNC,HBPD,HFPD,HOZVAL,CLKVAL 域等。几乎所有的 LCD

驱动器都需要配置符合自身需求的帧频率值,根据寄存器值确

定帧频率的公式如下:

Frame Rate = 1/[{(VSPW + 1) + (VBPD + 1) + (LINEVAL +

1) + (VFPD + 1)} × {(HSPW + 1) + (HBPD + 1) + (HFPD + 1) +

(HOZVAL + 1)} × {2 × (CLKVAL + 1)/ (HCLK)}]

3. Framebuffer 驱动程序实现

基于以上对 LCD 各主要寄存器的分析,本文开发了基于

Framebuffer 机制的 S3C2410fb 驱动程序,下面是调试成功的部

分代码,作用是初始化显示屏幕和设置 LCD 控制寄存器的值,

使 LCD 控制器处于初始化可用状态。

(/arch/arm/mach-s3c2410/mach-smdk2410.c 文件中)

(1)添加 LCD 控制器配置信息,这些参数配置要符合 LCD

控制器自身特性。

static struct s3c2410fb_mach_info smdk2410_lcd_platdata = {

.width = 640,

.height = 480,

.xres = {.defval = 640, .min = 640, .max = 640,},

.yres = {.defval = 480, .min = 480, .max = 480,},

.bpp = {.defval = 16, .min = 16, .max = 16, },

.regs ={.lcdcon1 = S3C2410_LCDCON1_TFT16BPP |

S3C2410_LCDCON1_TFT | S3C2410_LCDCON1_CLKVAL(1),

.lcdcon2 = S3C2410_LCDCON2_VBPD (32) | S3C2410_LCD-

CON2_VFPD(9) | S3C2410_LCDCON2_VSPW(1),

.lcdcon3 = S3C2410_LCDCON3_HBPD(47) | S3C2410_LCD-

CON3_HFPD(15),

.lcdcon4 = S3C2410_LCDCON4_HSPW(95) | S3C2410_LCD-

CON4_MVAL(13),

.lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCD-

CON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME |

S3C2410_LCDCON5_HWSWP | S3C2410_LCDCON5_PWREN,

}, };

(2)在系统平台设备链中添加 LCD 设备,这是 Linux2.6 以后

的内核中增加的一种机制。

static struct platform_device *smdk2410_devices [] __initdata

={

&s3c_device_lcd, };

(3) 将上 面 定义 的 含 有 LCD 配 置 信 息的 结 构 体 关 联 到

S3C2410 平台,使 S3C2410 系统启动时能够使用这些配置参数

启动 LCD 控制器。

static void __init smdk2410_map_io(void)

{ set_s3c2410fb_info(&smdk2410_lcd_platdata);}

(4)此外,还需对 LCD 设备 I/O 地址空间进行地址映射,将

LCD I/O 空间映射到虚拟地址空间。(/arch/arm/mach-s3c2410/

s3c2410.c 文件中)

static struct map_desc s3c2410_iodesc[] __initdata = {

- 2 - 360元 / 年 邮局订阅号:82-946

《现场总线技术应用 200 例》

您的论文得到两院院士关注

嵌入式系统应用

IODESC_ENT(LCD),};

//添加此行,使 S3C2410 平台能 (上接第 24 页)

够映射 LCD I/O 空间

个脉冲,需要执行 86 个机器周期,如果让步进电机速度加快,

(5)最后还需在编译配置文件中添加必要的配置信息,使得 减少每个脉冲所需执行的机器周期,如果让步进电机速度减

编译系统时能够将上述 Framebuffer 驱动程序编译进内核。具体 方法如下。(/drivers/video/Kconfig 文件中)
添加 S3C2410 LCD 驱动程序配置选项,这样,在顶层目录 make menuconfig 时,可以显示 LCD 控制驱动程序的编译选项。 添加代码如下。
config FB_S3C2410

慢,增加每个脉冲所需执行的机器周期。 该装置在试验中技术指标可达到:喷嘴运动距离为 0~
0.5m,喷嘴位移速度在 0~20m/s 范围内可控,喷嘴位移控制精 度 0.05mm,一次能高速电喷镀零件表面 500mm2;制备复合镀 层与金属基体结合强度高,200℃/25℃热震 30 次无裂纹和脱 层;镀层孔隙率低,10μm 以内无孔隙低。

tristate "S3C2410 LCD framebuffer support" depends on FB && ARCH_S3C2410 select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT select FB_SOFT_CURSOR 添加 LCD 驱动程序的编译命令,这样在编译 Linux 内核时

4 结论
本装置同现有技术相比,采用单片机能实现喷嘴直线往复 运动速度的精确控制,同时也能实现喷嘴与阴极距离的调节, 并能通过显示器实现不同速度时数据的读取,实现大面积的复 合镀层的制备,极大的提高了应用范围。通过控制器发出信号 给驱动器,驱动器按照控制器的信号使电机以特定的转速和转 向运动。运动方式可以手动或循环的方式,对速度无级调节,可

相关驱动程序文件可以被编译。添加代码如下。(/drivers/video/ 控制,控制精确度高,操作方便。可制备出大面积高性能的、与

Makefile 文件中) obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o 通过以上 LCD 驱动程序可以实现 S3C2410 平台上 LCD 设
备的成功启动,可以在系统复位后的启动打印信息中看到 S3C2410fb 启动的信息:fb0: s3c2410fb frame buffer device.至此, 可以确定上述 LCD 驱动设计实现成功。文中给出的程序代码 均已通过验证。
4 结束语
嵌入式系统图形显示界面设计已经得到越来越广泛的应 用。本文针对 S3C2410 平台的 LCD 驱动进行了开发,使之能够 显示文本和图形,为进一步 MiniGUI 软件移植提供了基本保

基体结合力强的各种复合镀层。

技 创新点:实现了一种高速电喷镀喷嘴精密控制的装置,提
高了喷镀的应用范围。研究方法和数据来源:装置研制成功,通

过喷镀喷头运行实验获得数据。 参考文献



创 [1]李卫东,周小荣,等. 电沉积复合镀层的研究现状[J]. 电镀与
装饰,2000,19 (5): 44-49。

新 [2]Zhao Q,Liu Y,et al. Graded Ni-P-PTFE Coatings and Their
Potential Applications [J]. Surface and Coatings Technology,

2002,155: 279-284。

[3]Ming D G,Hou K H,et al. The Friction and Wear of (Ni-P-

PTFE) Composite Deposits under Water Lubrication [J]. Materials

Chemistry and Physics,2002,77: 755-764。

证,目前,S3C2410 平台上基于 MiniGUI 的图形显示设计已经得 [4]王伟,钱士强,等. 高速电喷镀纳米聚四氟乙烯(PTFE)复合镀

到很好应用。 创新点:文章全面的总结归纳了嵌入式 Linux 设备驱动特
点,完整的阐述 S3C2410 平台上 LCD 驱动的实现流程,具有一 定的参考性和实用性。 参考文献 [1]Jonathan Corbet,Alessandro Rubini&Greg Kroah -Hartman 著 . 魏永明,耿岳,钟书毅译.LINUX 设备驱动程序[M].中国电力出版 社.2005.11.第三版.47-59 [2]黄信兵,阎勤劳,孙晶等著.基于 Linux 的嵌入式 LCD 设计[J]. 微计算机信息.2006, 8-2:157-159

层的研究动态与展望[J]. 金属热处理,2006,31(4): 1-4。 [5]朱伟.基于 AT89C51 单片机的测功机控制系统[J].微计算机 信息,2005,9-2:133-134。 作者 简 介:张锡民(1978-),男(汉族),安徽合肥人,上海工程技 术大学工程实训中心讲师,硕士,研究方向:自动化控制。钱士强 (1953-),男,江苏张家港人,上海工程技术大学材料工程学院,教 授,博士,研究方向为:合金改性。王 伟(1973-),男,硕士,上海 工程技术大学材料工程学院,研究方向为:纳米表面工程。 Biography:ZHANG Xi -min (1978 - ), male (Han Nationality), Hefei of Anhui Province, Shang -hai University of Engineering Science, Lecture of Engineering Practice and Training Center,

作者简介:宫莉莉(1984-),女,汉族,北京大学信息与工程学院 master degree,Research area: Automatic Control.

硕 士 研究 生 ,主 要研 究 方 向:嵌 入 式 系统 软 件 开 发 赵 勇 (201620 上海 上海工程技术大学工程实训中心)张锡民

(1963-),男,汉族,博导,北京大学移动视频网络技术中心主 任,主要研究方向:嵌入式系统多媒体技术 Biography:GONG Li -li (1984 - ),female,the Han nationality, Peking University Information and Engineering College student, Master, research in embedded system software development. (100081 北京大学) 宫莉莉 赵 勇 通讯地址:(518055 广东省深圳大学城北大校区 N1406) 宫莉莉
(收稿日期:2008.11.15)(修稿日期:2008.12.03)

(201620 上海 上海工程技术大学材料工程学院) 钱士强 王 伟 (Engineering Practice and Training Center, Shanghai University of Engineering Science, Shanghai 200336) ZHANG Xi-min (School of Materials Engineering, Shanghai University of Engineering Science, Shanghai 200336, China) QIAN Shi-qiang WANG Wei 通讯地址:(201620 上海市松江区龙腾路 333 号)张锡民
(收稿日期:2008.11.15)(修稿日期:2008.12.03)

《P LC 技术应用 200 例》

邮局订阅号:82-946 360 元 / 年 - 3 -


相关文章:
基于嵌入式Linux系统的LCD驱动实现_图文.pdf
基于嵌入式Linux系统的LCD驱动实现 - 匦画塑嬖堕亟堕要因 文章编号:10
基于嵌入式LINUX车载导航系统的LCD驱动实现_图文.pdf
基于嵌入式LINUX车载导航系统的LCD驱动实现 - 机电一 体化 ? % ?
嵌入式Linux LCD驱动程序开发_图文.ppt
嵌入式Linux LCD驱动程序开发_计算机软件及应用_IT/计算机_专业资料。第7章 嵌入式Linux驱动程序开发 ? 嵌入式Linux LCD驱动程序开发实例 197 ? LCD显示原理 ? ...
嵌入式LinuxLCD驱动程序开发_图文.ppt
嵌入式LinuxLCD驱动程序开发 - ? ? ? ? LCD显示原理 LCD驱动程序的设计 LCD驱动设计步骤 BMP文件显示 197 LCD显示原理 液晶显示器(Liquid Cry...
嵌入式系统Linux下LCD显示驱动的开发_图文.pdf
嵌入式系统Linux下LCD显示驱动的开发 - 计算机技术与发展 第 16 卷
基于嵌入式Linux的LCD背光调节及驱动的实现_图文.pdf
基于嵌入式Linux的LCD背光调节及驱动的实现 - 风河帮助用户应对嵌入式云计
基于嵌入式Linux系统的LCD驱动实现.pdf
基于嵌入式 Linux 系统的 LCD 驱动实现 Implementation
嵌入式Linux下LCD界面应用程序开发_图文.pdf
16 cm 小型触摸屏 TB2150 作为输入设 备 ,开发了基于嵌入式 Linux 的 L CD...的接口信号 , 最终可在该液晶显 L CD 显示驱动电压 V EE 由直流升压模块...
基于linux的嵌入式lcd驱动的设计毕业设计.doc
基于linux的嵌入式lcd驱动的设计毕业设计 - 哈尔滨工程大学 毕业设计(论文) 题学 目院 基于 Linux 的嵌入式 LCD 驱动设计 通信与电子工程学院 毕...
基于嵌入式Linux的LCD背光调节及驱动的实现.pdf
基于嵌入式Linux的LCD背光调节及驱动的实现 - 为了减少手持式设备的功耗并满足LCD背光调节的应用需求,在嵌入式Linux下,设计了一种用按键来调节输出方波占空比以实现...
嵌入式Linux下的LCD驱动程序设计与实现_论文.pdf
嵌入式Linux下的LCD驱动程序设计与实现 - 从设备驱动程序的作用、分类及文
基于嵌入式Linux的LCD背光调节及驱动实现.pdf
基于嵌入式Linux的LCD背光调节及驱动实现 - 基于嵌入式 Linux 的 LCD 背光调节及驱动实现 ? 摘要:为了减少手持式设备的功耗并满足 LCD 背光调节的应用需求, 在...
基于S3C6410平台的嵌入式Linux系统LCD驱动模块.txt
基于S3C6410平台的嵌入式Linux系统LCD驱动模块 摘 要: 以S3C6410处理器为核心,采用嵌入式Linux操作系统,通过帧缓冲设备驱动方式,实现了TFT液晶显示器的驱动程序。...
ARM11嵌入式系统Linux下LCD的驱动设计_论文.pdf
ARM11嵌入式系统LinuxLCD的驱动设计 - 对ARM11嵌入式系统Linux下的LCD驱动设计进行了研究,分析了在Framebuffer基础上编写LCD驱动的方法和两种直接读写GPIO...
基于ARM9&Linux的液晶驱动终端设计_图文.ppt
基于ARM9&Linux的液晶驱动终端设计_IT/计算机_专业资料。文档介绍了1 引言,2 ...千锋嵌入式学院 最专业的嵌入式培训机构 1 引言 2 系统组成及工作原理 3 系统...
基于嵌入式系统的LCD图形显示设计和实现.doc
基于嵌入式系统的LCD图形显示设计和实现 - 附件 项目编号 湖北大学知行学院大学生科技创新项目 申请书 项目名称: 基于嵌入式系统的 LCD 图形显示设计和实现 起止...
基于嵌入式Linux的TFT LCD IP及驱动的设计_论文.pdf
基于嵌入式Linux的TFT LCD IP及驱动的设计 - 本系统的总体设计框图
基于嵌入式Linux 的 TFT LCD IP 及驱动的设计.pdf
嵌入式 Linux 下的 TFT_LCD 驱动实现 4.1 构件系统 首先把设
基于嵌入式Linux的LCD背光调节及驱动的实现.doc
基于嵌入式Linux的LCD背光调节及驱动的实现 - 龙源期刊网 http://www.qikan.com.cn 基于嵌入式 Linux 的 LCD 背光调节及驱动实现 作者:刘景桑 李京...
嵌入式Linux下彩色LCD驱动的设计与实现.doc
基于ARM_Linux的LCD显示模... 4页 免费 TFT LCD液晶显示器的驱动原... 28...嵌入式Linux下彩色LCD驱动的设计与实现嵌入式Linux下彩色LCD驱动的设计与实现隐藏...