积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> LINUX
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | Palm OS | XP Embedded | Nucleus | DeltaOS/SMARTOS/Hope | 新产品 | 相关文章 |
基于嵌入式Linux的图形界面显示系统的设计
 
作者:陈沨 毛洋林 潘志浩   来源:微计算机信息    点击数:72   更新时间:2008-5-15
您可以添加到网摘 让更多人关注此文章:

    

摘要:本文详细描述了基于uClinux嵌入式操作系统的图形界面显示系统的实现方法,并对uClinux下Framebuffer驱动程序编写进行了专门探讨。
关键词:uClinux ,Microwindow,Framebuffer 驱动程序

1前言
    在嵌入式系统这个IT产业的新领域,Linux 以其所具备的稳定、高效、易定制、易裁减、硬件支持广泛的特点,结合其免费、源码开放的特征。使得Linux在嵌入式操作系统中的地位越来越重要。越来越多的嵌入式系统,包括 PDA、机顶盒、WAP 手机等等系统均要求提供全功能的 Web 浏览器。这包括 HTML 的支持、javascript 的支持,甚至包括 Java 虚拟机的支持。而这一切都要求有一个高性能、高可靠的 GUI 的支持。这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和 GUI 之上,比如 Windows 或 X Window。但是,在出现 Linux 系统之后 GUI 仍然是一个问题。关键是 X Window 太过庞大和臃肿。uClinux是专为无存储器管理单元的处理器定制的嵌入式Linux操作系统。其内嵌的Microwindow为嵌入式系统图形界面提供了良好的支持。

2系统的组成结构
    基于uClinux的嵌入式图形界面显示系统分为软件和硬件两大部分。软件由uClinux、Framebuffer驱动程序和Microwindow三部分组成。Motorola嵌入式CPU 5272、EPSON的13506 LCD 控制器和TRULY公司的MCT-G320240DNCW液晶显示屏组成图形界面显示硬件系统。结构如图1所示。

    硬件设计环境:开发板是Motorola 5272C3,uClinux内核版本号是2.4.17。

  3 Microwindow的架构

   Microwindow是一种轻量级的GUI,具有轻型、占用资源少、高可靠性的特点。Microwindow 是一个非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。Microwindow是一种分层设计的架构。最底层是一组屏幕、鼠标/触摸屏、键盘的抽象接口,不依赖任何特殊的硬件。中间层是可移植的图形引擎。最高层是各种API,供图形应用程序调用。目前有两种API,一种是ECMA  APIW,第二种是NANO-X  APIS.。这些API与win32和x window系统基本上兼容,使应用程序移植非常容易。
                               

   在uClinux下Microwindow最底层的SCREEN 抽象接口建立在linux framebuffer 设备基础上。Framebuffer device 是对图形显示硬件设备的抽象,它代表视频硬件的帧缓存。本文将重点讨论uClinux下针对具体硬件环境如何设计其Framebuffer设备驱动程序。

4 Framebuffer设备驱动程序的设计
     Linux下设备分为字符设备、块设备和网络设备接口三大类。那么Framebuffer设备属于哪一类呢?刚开始设计时容易使人困惑。其实对使用者而言,帧缓冲设备也就是Framebuffer device和目录/dev下的其他设备没有区别。它是一个字符设备,使用主设备号29,次设备号用于帧缓冲设备之间的区分。
   例如:
         0=/dev/fb0   First frame buffer
         1=/dev/fb1    Second frame buffer
          …
         31=/dev/fb31  32nd   frame buffer
         0~31就是次设备号
    帧缓冲驱动程序主要依靠四个数据结构。这些结构定义在 include/linux/fb.h程序内。它们分别是fb_info、fb_var_screeninfo、fb_fix_screeninfo和fb_monospecs。后三个结构可以在用户空间访问,结构 fb_info只能在内核空间访问。
    结构 fb_fix_screeninfo定义了视频板卡硬件的某些固定的特性。这些特性在硬件初始化时就被定义了以后不得修改。在这个结构体中最重要的成员是smem_len和line_length。前者指示显存的大小,后者提供了一个显示行的byte统计数,使显存指针很方便的移到下一显示行。
    结构fb_var_screeninfo定义了视频硬件一些可变的特性。这些特性在程序运行期间可以由应用程序动态改变。由于篇幅有限在此只对这个结构体中主要的成员作出解释,详细解释请参见fb.h。成员变量xres 和 yres定义在显示屏上真实显示的分辨率。而xres_virtual和yres_virtual是虚拟分辨率,它们定义的是显存分辨率。比如显示屏垂直分辨率是400,而虚拟分辨率是800。这就意味着在显存中存储着800行显示行,但是每次只能显示400行。但是显示哪400行呢?这就需要另外一个成员变量yoffset,当yoffset=0时,从显存0行开始显示400行,如果yoffset=30,就从显存31行开始显示400行。
    在这四个结构中最重要的结构就是fb_info,它只能在内核空间访问。其内部定义了struct fb_ops, 结构fb_ops成员就是由一系列Framebuffer 操作函数组成。
    结构fb_monospecs在2.5.x内核下才会被采用,在目前内核下不使用。
    如前所述就使用者而言,帧缓冲设备和一般的字符设备没有区别。因此写视频硬件的设备驱动程序就有两种选择,一种是把视频硬件抽象成一般的字符设备,驱动程序的写法和一般的字符设备驱动类似。第二种就是帧缓冲设备的驱动程序的编写。第一种方法不规范,而且实现功能有限,故不提倡。下面用与字符驱动程序类比的方法介绍如何编写帧缓冲驱动程序。
    字符驱动程序用函数register_chrdev向内核注册设备。register_chrdev需要三个参数,参数一是主设备号,参数二是对应与参数一主设备号的驱动程序名;参数三用来登记驱动程序实际执行操作的函数指针,它指向struct file_operation。编写字符驱动程序的主要工作就是编写各个子函数并填写file_operation各个域。当用户进程利用系统调用对设备文件进行操作时,系统通过设备文件的主设备号找到相应的设备驱动程序。然后读取这个数据结构相应的操作函数指针,接着就把控制权交给这个函数。这就是linux驱动程序工作原理。
    帧缓冲设备驱动程序与此类似,其调用register_framebuffer注册一个framebuffer设备。它只有一个参数就是前面介绍的struct fb_info, 其内部定义了结构成员fb_ops。编写帧缓冲驱动程序主要就是编写fb_ops各个成员函数。与字符驱动设备不同的是帧缓冲驱动程序并不实现ioctl调用。帧缓冲驱动程序的初始化函数在linux/drivers/video/fbmem.c中登记。所有的帧缓冲驱动程序的ioct调用由fbmem.c统一实现。由fbmem.c根据当前正在工作的帧缓冲设备提供ioctl调用。

5 硬件电路的设计
         5272是Motorola公司Coldfire系列嵌入式CPU,在Motorola公司嵌入式CPU中属于中低档产品。低档不等于低效,在主频66M时可以达到63MIPS,接近MPC860的MIPS。并且外围电路接口丰富,在Coldfire系列中集成度最高。
    5272总线是一种32位同步数据地址总线,总线传输终止支持同步终止和异步终止。在5272与外围器件总线传输周期中,利用TA信号可以在总线传输周期插入等待时钟周期。实现总线传输的异步终止。5272总线接口使用BS0~BS3四个信号显示当前总线周期数据总线宽度。5272的I/O空间是内存映射的,所以没有专门的I/O地址空间。因为5272没有MMU单元,所以5272的内存空间是物理地址直接寻址。
         液晶屏控制器是EPSON公司的13506。这是一款LCD/CRT/TV图形控制器。CPU接口广泛。拥有16bit宽度的EDO显存接口,显存最大可达2Mbytes。在16bpp的情况下最大分辨率可达640×480。支持虚拟显示,即显示图像尺寸可以大于屏幕实际尺寸。

         下图是Coldfire 5272 CPU 与 EPSON13506之间的接口电路示意图。
        

      
     EPSON13506的CPU接口数据总线宽度是16位。5272是大印第安字节序,当总线宽度是16位时,数据总线高16位有效。EPSON13506 M/R#管脚用来控制当前读写是对显存的读写还是对13506 I/O寄存器的读写,5272地址线A21对其进行控制。这样在5272 CS6的地址空间中,地址21位是1就是显存的地址,为0就是13506 I/O寄存器的地址。5272地址总线A0并未接到EPSON13506 AB0管脚上,这是由于在EPSON13506 CPU接口模式 Generic1情况下,EPSON13506 AB0管脚必须接高电平。这样就无法实现对字节的寻址。为了实现对字节的寻址,可以通过一片CPLD进行逻辑运算实现对相应管脚的选择,实现字节寻址。
    整个电路设计的重点难点在于对EPSON13506 CPU接口类型的深入理解,显存和LCD液晶屏的连接比较简单,在这里就不再赘述。

6结束语
    目前越来越多嵌入式系统要求图形显示界面,特别是在一些工业控制领域。本系统已经成功运用于色谱仪工作站上。其友好的人机界面大大降低了仪表操作难度,简化了操作流程,提高了生产效率。

参考文献:
[1]Allessandro Rubin,Linux Device Drivers O’Reilly&Assocates、Inc、1998
[2]陈莉君,Linux操作系统内核分析[M].北京,人民邮电出版社,2000



相关文章
· 基于ARM和DM9000的网卡接口设计与实现[23]
· 嵌入式多媒体处理器:选择双内核或单内核?[20]
· 基于AT91R40008微处理器的软件定时器设计[16]
· 南京7月ARM嵌入式暑假班火热招募中[71]
· 一种8位嵌入式RISC MCU IP核数据通道模型设计[63]
热门评论排行
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·VHDL设计中电路简化问题的
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
HA11529
“科技奥运与计算机技术的应用”研讨会
性能差异化功率器件制造面临多重挑战
探索中国特色IC业发展新模式
研祥专家做客嵌入式技术网,谈科技奥运
搭建多方交流平台 中国嵌入
Compuware Cha
中华嵌入式人才库正式运营新闻发布会
“科技奥运与计算机技术的应用”研讨会
意法半导体(ST)2007年企业责任
 
热门下载 [更多]
 
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
[ ] 实用电源电路集锦
 
论坛新帖 [更多]
 
高性能ATMEL 9260核心...
超低价ARM9开发板 475元...
哪里可以买到和LAUTERBA...
一款高端网络芯片介绍...
经典嵌入式培训视频...
[原创]NRF2401 NRF...
需要LM324中文资料...
[求助]大家用过lm331的可...
单片机培训班于7月12日在华北...
重磅资料-------65K色...

 
赞助商 [更多]
 


 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网