嵌入式Linux下Qt/Embedded的应用

发布者:zeta16最新更新时间:2012-04-05 来源: 计算机技术与发展 关键字:嵌入式Linux  Qt  Embedded  帧缓冲 手机看文章 扫描二维码
随时随地手机看文章

    引言

    嵌入式操作系统是目前比较流行的操作系统,以其小巧、操作简单、便于携带而深受消费者的欢迎。在当今流行的嵌入式操作系统当中,Linux深受开发者的青睐。Qt是Trolltech公司推出的一个多平台的C++图形用户界面应用程序框架。它给应用程序开发者提供建立图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正的组件编程。

    Qt是由Trolltech这家公司所开发的一套开源的C++图形用户界面库。在XWindow上KDE桌面环境就是用这套图形界面库所建立。它采用 C++的语法,有各式各样的图形对象可供使用,采用signal/slot信号的事件信号传递机制。Qt/Embedded则是在嵌入式环境下所使用的 Qt。目前市面上所有上市的LinuxPDA都是采用Qt/Embedded作为图形接口的函数库。Qt/Embedded的特性是可以直接在 Framebuffer上显示图形接口,反应的速度更快了,这对硬件与容量都有限制的嵌入式环境来说非常重要。图1为Qt/Embedded的实现结构。

   
    图1 Qt/Embedded的实现结构

    笔者参与了一个基于ARM9的嵌入式Linux下的GUI的移植及应用程序开发,所用处理器是三星公司的S3C24l0X,操作系统为Linux2.4.18,应用GNUGCC交叉编译器。

    硬件平台

     S3C2410X是三星公司的基于ARM920T的S3C2410X芯片。S3C2410X集成了一个LCD控制器(支持STN和TFT带有触摸屏的液晶显示屏)、SDRAM、触摸屏、USB、SPI、SD和MMC等控制器,4个具有PWM功能的计时器和1个内部时钟,8通道的10位ADC,117位通用 I/O口和24位外部中断源,8通道10位AD控制器,处理器工作频率最高达到203MHz。

     S3C2410中的LCD控制器可支持单色/彩色LCD显示器。支持彩色TFT时,可提供4/8/12/16位颜色模式,其中16位颜色模式下可以显示 65536种颜色。配置LCD控制器重要的一步是指定显示缓冲区,显示的内容就是从缓冲区中读出的,其大小由屏幕分辨率和显示颜色数决定。文中采用的是台湾元太V16C6448ACTFT显示模块,在640*480分辨率下可提供16位彩色显示。

     Qt/Embedded底层支持分析

     Qt/Embedded的底层图形引擎是基于帧缓冲(Frame Buffer),帧缓冲是出现在2.2.x以上内核的版本当中的一种驱动程序接口。这种接口采用mmap系统调用,将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间以后,就可以直接进行读写操作了,而写操作可以立即反映在屏幕上。帧缓冲驱动程序是最重要的驱动程序之一,正是这个驱动程序才能使系统屏幕显示内容,其实现分为两个方面:一是对LCD及其相关部件的初始化,包括画面缓冲区的创建和对DMA通道的设置;二是对画面缓冲区的读写,具体到代码为read,write等系统调用接口。

    帧缓冲是Linux为图形设备提供的一个抽象接口,它允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的、统一的。应用程序不必关心物理显存的位置、换页机制等等具体细节。这些都是由帧缓冲设备驱动来完成的。帧缓冲设备对应的设备文件通常为/dev/fb031,Linux的帧缓冲设备的驱动主要基于两个文件:

     1)linux/include/linux/fb.h;
     2)linux/drivers/video/fbmem.c。

    帧缓冲设备属于字符设备,采用“文件层-驱动层”的接口方式。

    帧缓冲设备在驱动层所要做的工作仅仅是对Linux为帧缓冲的驱动层接口fb-info进行初始化,然后调用这两个函数对其注册或注销。帧缓冲设备驱动层接口直接对LCD设备硬件进行操作,而fbmem.c可以记录和管理多个底层设备驱动。

    文件fbmem.c中定义了帧缓冲设备的文件层接口file-operations结构体,它对应用程序可见,该结构体的定义如下:

     staticstructfile-operationsfb-fops=
     {
       owner:THIS-MODULE,
       read:fb-read,/*读操作*/
       write:fb-write,/*写操作*/
       ioctl:fb-ioctl,/*控制操作*/
       mmap:fb-mmap,/*映射操作*/
       open:fb-open,/*打开操作*/
       release:fb-release,/*关闭操作*/
     };

    在这个结构体中功能函数open()和release()不需要底层的支持,而read(),write(),mmap()则需要调用fb-get- fix(),fb-get-var(),fb-set-var()(这些函数位于结构体fb-info中指针fbops指向的结构体变量中)等与底层 LCD硬件相关的函数的支持。另一个功能函数是ioctl(),ioctl()是设备驱动程序中对设备的I/O通道进行管理的函数,应用程序应用 ioctl()系统调用来调用fb-get-fix(),fb-get-var(),fb-set-var()等方法来获得和设置结构体fb-info中 var,fix和cmap等变量的信息。在fbmem.c中给出了ioctl()命令和fb-info中结构体fb-ops的成员函数的对应关系如下:

     FBIOGET-VSCREENINFOfb-get-var
     FBIOPUT-VSCREENINFOfb-set-var
     FBIOGET-FSCREENINFOfb-get-fix
     FBIOPUTCMAPfb-set-cmap
     FBIOGETCMAPfb-get-cmap
     FBIOPAN-DISPLAYfb-pan–display[page]

    用户应用程序只需要调用FBIOXXXX来操作LCD硬件。

    嵌入式图形界面GUI的移植

    交叉编译和移植Qt/Embedded
    文中采用了Trolltech公司的Qt/Embedded2.3.6自由版作为目标板Linux图形界面库。在交叉编译前需要先修改Qt /Embedded的配置文件,将GCC,G++编译器和链接器设置为前文编译安装的交叉编译工具链。接着是设置环境变量,如下:

     exportPATH=/opt/host/armv4l/bin:$PATH
     exportQTDIR=$PWD
     exportQTEDIR=$QTDIR
     exportLD-LIBRARY-PATH=$QTDIR/lib:$LD-LI2
     BRARY-PATH

    然后配置Qt/Embedded将Qt/Embedded配置为动态链接库,并支持JPEG,JIF图像格式,像素位数支持4,8,16,24。

    ./configure-xplatformlinux-arm-g++-shared-system-jpeg-gif-qvfb-depths4,8,16,24

    最后交叉编译后,\qt-2.3.6\lib路径下的生成EmbeddedQt的3个动态SO库,分别是 libqte.so.2,libqte.so.2.3,libqte.so.2.3.6,将这些库文件拷贝到目标板文件系统中(/s3c2410pro /root/usr/qt/lib)。与此同时在\qt-2.3.6\examples生成了Qt/Embedded的一些示例应用程序 (/s3c2410pro/root/usr/qt/examples/)。可以将一部分或全部程序拷贝到目标板文件系统。

    这样当开发板启动以后,就可以在嵌入式系统下运行基于Qt/Embedded的应用程序了。

    交叉编译和移植Qtopia
    消费电子设备而开发的综合应用平台,它是基于Qt/Em2bedded图形界面库。Qtopia包括了窗口操作系统、游戏和多媒体、输入法、工作辅助应用程序等特性。

    同Qt/Embedded交叉编译一样,首先需要先修改Qtopia的配置文件,将GCC,G++编译器和链接器设置为    前文编译安装的交叉编译工具链。

    接着是设置Qtopia环境变量,因为Qtopia是基于Qt/Embedded库的,因此需要方才交叉编译的动态链接库的支持,需要同时设置Qt的环境变量。

     exportQTDIR=/linuette/host/Qt/embedded/qt-2.3.6
     exportLD-LIBRARY-PATH=/usr/lib:/lib:$QTDIR/lib:
    $LD-LIBRARY-PATH
     exportQPEDIR=/linuette/host/Qt/qpe/qpe-1.6.2
     exportPATH=/opt/host/armv4l/bin:$PATH
     exportTMAKEPATH=/usr/lib/tmake/lib/qws/linux-linuette-g++
    最后配置Qtopia将Qtopia配置为动态SO库形式:
    ./configure-xplatformlinux-arm-g++-shared
    编译make

    此时会出现/bin/uic:Commandnotfound的错误,这是因为没有指定Qt/Embedded的uic工具,uic的工具是Qt专门用来将ui(ui文件是Qt图形界面文件,支持所见即所得)文件生成.h和.cpp文件的。这里可以直接使用Qt/X11的uic工具,方法如下:在/qt- 2.3.6/bin目录下建立到RedHat9.0自带的QtX11的uic工具的链接。可以使用RedHat9.0下Qtdesigner(界面与 Delphi相类似)的应用程序开发嵌入式系统下的所见即所得的图形界面应用程序。

    编译通过后会在Qt/Embedded的路径/qt-2.3.6/lib下生成libqpe1.6.2的动态链接库,同样将这些库文件拷贝到目标板文件系统中(/s3c2410pro/root/usr/qt/lib)。在目标板文件系统目录/s3c2410pro/root/usr下新建qpe文件夹,将/qpe-1.6.2/apps,/qpe-1.6.2/pics,/qpe-1.6.2/docs,/qpe-1.6.2/sounds复制到该文件夹下。最后修改目标板Linux的/profile文件,设置Qtopia的环境变量:

     exportPATH=/usr/qpe/bin:$PATH
     exportQWS-SIZE=6403480
     exportPATH=/usr/qpe/bin:$PATH

    开发板启动后就会运行Qtopia图形界面了。

    总结

    目前越来越多嵌入式系统要求图形显示界面,特别是在一些工业控制领域,嵌入式Linux系统的应用也逐渐增多。Qt/Embedded延续了Qt在桌面系统的所有功能,丰富的API接口和基于组件的编程模型使得嵌入式Linux系统中的应用程序开发更加便捷。由于Qt/Embedded本身面向高端的手持设备和移动设备,将成为未来嵌入式系统的主流GUI。

关键字:嵌入式Linux  Qt  Embedded  帧缓冲 引用地址:嵌入式Linux下Qt/Embedded的应用

上一篇:MiniGUI在HDTV SoC平台上的移植
下一篇:恰当选择嵌入式Linux环境下的GUI系统

推荐阅读最新更新时间:2024-05-02 21:59

IAR Embedded Workbench®集成开发环境全面支持航顺芯片HK32MCU系列
IAR Embedded Workbench®集成开发环境已全面支持航顺芯片HK32MCU系列 中国上海—2021年12月—全球领先的嵌入式开发软件工具和服务提供商IAR Systems®日前宣布:其最新发布的IAR Embedded Workbench for Arm® version 9.20已全面支持航顺芯片HK32MCU系列,以保障基于HK32MCU芯片的嵌入式系统的可靠性。 IAR Systems 为Arm生态提供了完整的工具链,其产品包括集成开发环境(IDE)、跨平台的构建工具、代码分析工具、功能安全工具和信息安全工具等。基于IAR Systems与Arm生态的长期而广泛的合作关系,IAR Embedded W
[嵌入式]
嵌入式Linux系统中I2C总线设备的驱动设计
引言 I2C总线是PHILIPS公司推出的两线式串行总线,用于连接微控制器及其外围设备,具有简单、高效等特点。由于其接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片引脚的数量,降低了互联成本,特别适用于嵌入式产品。 而Linux系统具有开源、免费、网上资源丰富等优点,目前已成为嵌入式系统的主流选择。因此如何在嵌入式Linux系统中实现I2C功能成为实际开发中的问题。 I2C总线 I2C 总线通过串行数据SDA 和串行时钟SCL线在连接到总线的器件间传递信息,每个器件都有一个唯一的地址识别。根据数据传输时的功能不同,把器件分为主机和从机。主机是初始化总线的数据传输并产生允许传输的时钟信
[单片机]
<font color='red'>嵌入式Linux</font>系统中I2C总线设备的驱动设计
如何构造嵌入式Linux系统
前 言 目前嵌入式系统的应用越来越广泛,一台通用PC的外部设备就有5~10个嵌入式微处理器,如键盘、软驱、硬盘、显示器、打印机、扫描仪、USB接口等均是由嵌入式处理器控制的。在制造工业、过程控制、通信电视、仪器仪表、汽车船舶、航空航天、消费类产品均是嵌入式系统的应用领域。嵌入式系统目前主要有:Windows CE、VxWorks、QNX等,它们都具较好的实时性,系统可靠性,任务处理随机性等优点。但是它们的价格普遍偏高,很多开发商承受不起。因而,Linux操作系统成为嵌入式操作系统的首选,原因如下: 在精简内核在编译内核之前,首先要明确需要那些驱动和模块,然后只选择需要的驱动和模块,例如,如果系统不需要网络支持,则可
[单片机]
嵌入式Linux系统图形及图形用户界面
本文首先概述了 Linux 图形领域的基本设施,然后描述了一些可供嵌入式 Linux 系统使用的高级图形库以及图形用户界面支持系统。希望对嵌入式 Linux 系统的开发有所帮助。 1 Linux 图形领域的基础设施 本小节首先向读者描述 Linux 图形领域中常见的基础设施。之所以称为基础设施,是因为这些系统(或者函数库),一般作为其他高级图形或者图形应用程序的基本函数库。这些系统(或者函数库)包括:X Window、SVGALib、FrameBuffer 等等。 1.1 X Window 提起 Linux 上的图形,许多人首先想到的是 X Window。这一系统是目前类 UNIX 系统中处于控制地位的
[单片机]
学习心得:怎样高效学习嵌入式系统知识
1、学习linux   根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。     可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。     看内核期间是个
[嵌入式]
基于运行嵌入式Linux操作系统的ARM/DSP多机I2C通信设计方案
  引言   在很多嵌入式控制系统中,系统既要完成大量的信息采集和复杂的算法,又要实现精确的控制功能。采用运行有嵌入式Linux操作系统的ARM9微控制器完成信号采集及实现上层控制算法,并向DSP芯片发送上层算法得到控制参数,DSP芯片根据获得的参数和下层控制算法实现精确、可靠的闭环控制。   1 多机系统组成   该多机控制系统以ARM9微控制器s3c2440为核心,采用I2C总线挂载多个DSP芯片TMS320F28015作为协控制器,构成整个控制系统的核心。   1.1 S3C2440及TMS320F28015简介   Samsung公司的处理器S3C2440是内部集成了ARM公司ARM920T处理器内核的32位微控制器,资源
[单片机]
基于运行<font color='red'>嵌入式Linux</font>操作系统的ARM/DSP多机I2C通信设计方案
基于嵌入式Linux平台的多协议路由器设计
   引言   随着社会信息化进程和互联网的飞迅发展,对无线环境下提供数据服务的需求变得更加迫切。传统的无线移动网络通常以固定的基础设施为支撑,无法满足人们对日益增长的通信业务的要求,一种新型的无线网络——AdHoc网络应运而生。Ad Hoc网络又称移动自组网、多跳网络,具备细网灵活、快捷,不受有线网络的影响等特点,可广泛应用于军事和救援等无法或不便预先铺设网络设施的场合。此外,Ad Hoc网络朝着网络互连的方向发展,Internet的接入是其中一项主要内容。   Ad Hoc无线网络具有自身的特殊性,在组建实际使用的无线工作网络时,必须充分考虑网络的应用规模和扩展性,以及应用的可靠程度及实时性要求,选择合适的网络拓扑结构。目前
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved