基于Qt/Embedded嵌入式Linux GUI的移植开发

 摘 要:本文简要阐述嵌入式Linux GUI用途及前景,分析了几种嵌入式GUI的基本架构,并详细叙述了基于Qt/Embedded图形用户系统在s3c2410处理器上的移植开发步骤,粗略指出了Qt/Embedded的优缺点,可为嵌入式GUI开发者提供实用参考。

关键词:嵌入式Linux Qt/Embedded移植 GUI
1.概述
我们时常在PC机上看到WINDOWS图形用户界面,以及LINUX上的KDE、GNOME,这些图形用户界面美观且方便用户操作,功能全面。而嵌入式系统经常有一些特殊的要求,PC机上的图形窗口系统是不能满足的。比如特殊的外观效果,控制提供给用户的函数,提高装载速度,特殊的低层图形或输入设备。因此,嵌入式系统必定要有自己的图形用户界面。嵌入式图形用户界面就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。
当今世界,嵌入式系统正以它体积小、专用性等特点深入社会应用的各个层次。在某些嵌入式应用领域中,比如PDA、HandHeld PC、AutoPC等嵌入式系统中,图形用户界面的性能将直接影响整个系统的性能,是产品制造商和最终用户共同关注的问题。如何针对特定的平台,选择适合的GUI进行移植,定制和改进,是嵌入式系统开发者共同关注的问题。
2.嵌入式Linux GUI简介
一个能够移植到多种硬件平台上的嵌入式GUI系统,应用至少抽象出两类设备:基于图形显示设备(如VGA卡)的图形抽象层GAL(Graphic Abstract Layer),基于输入设备(如键盘,触摸层等)的输入抽象层IAL(Input Abstract Layer)。GAL层完成系统对具体的显示硬件设备的操作,极大程度上隐蔽各种不同硬件的技术实现细节,为编程序开发人员提供统一的图形编程接口。 IAL层则需要实现对于各类不同输入设备的控制操作,提供统一的调用接口。GAL层与IAL层的设计概念,可以极大程序地提高嵌入式GUI的可移植性,如图1所示。目前应用于嵌入式Linux系统中比较成熟,功能也比较强大的GUI系统底层支持库有SVGA lib、LibGGI、Xwindow、framebuffer等。

API编程接口
嵌入式GUI

GAL层 IAL层

图形显示设备 输入设备

图1:可移植嵌入式GUI的实现结构
对于 Linux 下的 GUI 开发来说,是一个很宽泛的的话题,它本身继承了 Xlib、Xt、Motif 等传统 Unix 下的 GUI 开发工具,又有 GTK+、QT 这样在 Linux 上更流行的 GUI 工具箱。
嵌入式Linux系统有代表性的GUI系统主要有MiniGUI、MicroWindows、Tiny X以及Qt/Embedded。这些GUI系统在接口定义、体系结构、功能特性等方面存在着很大的差别。
Tiny-X,是标准X-windows在嵌入式系统的小巧实现,作为一个图形环境,X-window是成功的,但由于在体系接口上的原因,限制了它对游戏、多媒体的支持能力。
Nano-X Window System(原来叫MicroWindows),其主要特色在于提供了C/S体系结构,同时也提供了相对完善的图形功能。但却无任何硬件加速能力,图形引擎中也存在着许多未经优化的低效算法。
MiniGUI,是建立在比较成熟的图形引擎之上,其特点是小巧精致。它尽量保持与Win32的兼容,这样在Win CE应用的场合,也可以使用MiniGUI。
Qt/Embedded,是一个专门为小型设备提供图形用户界面的应用框架和窗口系统。提供了丰富的窗口小部件(Widgets),并且还支持窗口部件的定制,因此它可以为用户提供漂亮的图形界面。Qt 是 KDE 等项目使用的 GUI 支持库,所以有许多基于 Qt 的 X Window 程序可以非常方便地移植到 Qt/Embedded 版本上。
另外还有一些高级图形库,如SDL,MESA,OPENGL,DIRECTFB,ALLEGRO等,在开发游戏及多媒体软件方面有各自的优势。
3.嵌入式GUI的选取,移植步骤
3.1 Qt/Embedded选取
Qt/Embedded是著名的Qt库开发商Trolltech公司开发的面向嵌入式系统的Qt版本。Qt/Embedded同样是Server/Client结构,它延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用framebuffer作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏以及用户自定义的设备等。
Qt/Embedded类库完全采用C++封装,丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面。它的类库接口完全兼容于同版本的Qt-X11,使用X下的开发工具可以直接开发基于Qt/Embedded的应用程序GUI界面。
Qt/Embedded当前的最新版本为3.3.2,能够支持Trolltech的手持应用套件Qtopia。
3.2 针对Qt/Embedded的实现特点,移植该嵌入式GUI系统一般分为以下几个步骤:
1) 设计硬件开发平台,并移植Linux操作系统;
2) 采用静态链接进Linux内核的方式,根据该平台显示设备的显示能力,开发framebuffer驱动程序;
3) 开发针对该平台的鼠标类设备驱动程序,一般为触摸屏或USB鼠标;
4) 开发针对该平台的键盘类设备驱动程序,一般为板载按钮或USB键盘;
5) 根据framebuffer驱动程序接口,选择并修改Qt/Embedded中的QLinuxFbScreen和QgfxRaster类;
6) 根据鼠标类设备驱动程序,实现该类设备在Qt/Embedded中的操作接口;
7) 根据键盘类设备驱动程序,实现该类设备在Qt/Embedded中的操作接口;
8) 根据需要选择Qt/Embedded的配置选项,交叉编译Qt/Embedded的动态库;
9) 交叉编译Qt/Embedded中的Example测试程序,在目标平台上运行测试。
4.Qt/Embedded在Edukit-III 2410实验平台上移植和应用
4.1 开发平台
本实验平台采用s3c2410核心处理器,64M SDRAM,32M NAND FLASH(用于固化带Qt/Embedded图形界面的文件系统),20键矩阵键盘,外部接口主要有两路RS232串口,USB主从接口,ps/2接口,jtarg接口,采用320x240分辨率的TFT LCD和S3C2410内部LCD控制模块作为显示设备,S3C2410内部触摸屏控制器;S3C2410内部的USB Host控制器,较好地支持了USB接口的键盘和鼠标,可采用USB接口的鼠标/键盘或触摸屏作为输入设备。
GUI实现方案采用了Qt/Embedded 2.3.7和QTOPIA 1.7.0 (基于Qt/Embedded 2.x系列的手持套件,下载地址ftp://ftp.trolltech.com)系统,QTOPIA是Trolltech推出的Qt 掌上机环境(Qt Palmtop Environment,俗称 Qpe)。Qpe 提供了一个基本桌面窗口,并且该环境为开发提供了一个易于使用的界面。Qpe 包含全套的个人信息管理(Personal Information Management (PIM))应用程序、因特网客户机、实用程序等等。然而,为了将 Qt/Embedded 或 Qpe 集成到一个产品中,需要从 Trolltech 获得商业许可证。
整个系统结构如图2所示。

图2:基于Linux及Qt/Embedded的嵌入式软件开发平台体系结构图
4.2 Qt/Embedded库的编译
在获得Qt/Embedded的源码(free版的源码可在www.trolltech.com下载) 之后,如果要做Qt/Embedded的开发,最好把Qt/Embedded编译成为两个版本,一个是主机版,一个是目标版,将其分别解压到两个目录(/qte/qte-2.3.7-host/和/qte/qte-2.3.7-target/)
4.2.1 编译主机版本:
(1) 设置环境变量
export QTDIR=/qte/qte-2.3.7-host
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(2) 运行./configure
cd $QTDIR
./configure -depths 4,8,16 -no-ipv6 -no-cups -no-pch –qvfb
(3) 编译Qt/Embedded函数库
make sub-src
(4) 编译Qt/Embedded辅助开发工具
cd tools;make
这一步就会成一个可以在主机环境(x86)下运行的uic指令,放在$QTDIR/bin目录中。
4.2.2 编译目标版本:
(1) 设置环境变量
export QTDIR=/qte/qte-2.3.7-target
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(2) 运行./configure
cd $QTDIR
./configure -depths 4,8,16 -no-ipv6 -no-cups -no-pch -qvfb -embedded arm
(3) 复制uic命令
cp /qte/qte-2.3.7-host/bin/uic /qte/qte-2.3.7-target/bin/
(4) 编译Qt/Embedded函数库
make sub-src
到此为止,已经将基于Qt/Embedded的嵌入式GUI开发系统建立。但是要注意的是,开发中我们可能需要用到Qt/Embedded中没有的库,那么就需要在安装编译配置Qt之前将所需的库准备好,在配置编译Qt/Embedded选项时用 -enable-lib* 选上即可。
4.3 安装其他工具
4.3.1 安装progen工具
progen工具根据源文件生成相应的.pro文件,例如:progen –n hello –o hello.pro
4.3.2 安装tmake工具
tmake是根据.pro文件生成Makefile文件的工具,例如:tmake hello.pro –o Makefile
4.4 Qt/Embedded应用程序的开发流程如下:
(1)使用Qt Designer设计用户界面,生成ui文件;
(2)使用vi编辑器编写源代码,用progen工具或qmake生成pro文件;
(3)使用tmake或者qmake根据pro文件生成Makefile文件;
(4)运行make,生成可执行文件;
(5)打开qvfb,运行应用程序。
在开发中需要特别注意的是,Qt/Embedded图形引擎是通过直接写入帧缓冲来实现的,那么我们在宿主机上用qvfb(vitural framebuffer)来模拟帧缓冲。qvfb是X窗口用来运行和测试Qtopia应用程序的系统程序,它使用了共享存储区域(虚拟的帧缓冲)来模拟帧缓冲并且在一个窗口中(qvfb)模拟一个应用来显示帧缓冲,通过指定显示设备的宽度和颜色深度,使得虚拟出来的缓冲帧和物理的显示设备在每个像素上保持一致,同时显示区域被周期性的刷新。qvfb它允许我们在桌面环境及其上运行Qt嵌入式程序,而不需要在命令台和X11之间来回切换,调试应用程序时不需要总是刷新嵌入式设备的FLASH存储空间,从而缩短开发周期。
5.结论
嵌入式系统属于资源受限系统,因此嵌入式GUI开发也必须考虑系统开销的问题,这就需要对具体应用进行精心分析,使得GUI系统满足对用户特定的需要。Qt/Embedded延续了Qt在桌面系统的所有功能,丰富的API接口和基于组件的编程模型使得嵌入式Linux系统中的应用程序开发更加便捷,广泛用于高级消费电子开发;虽然Qt/Embedded的API库在有些时候显得过于臃肿,但它有面向对象的体系结构,资源占用少,抗锯齿文本和混和视频的象素映射等优点,已其成为嵌入式GUI开发的一大利具。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt/Embedded是一种用于嵌入式系统的Qt应用程序开发框架。它允许开发人员使用Qt的功能和特性来构建嵌入式系统的用户界面。下面是一个关于Qt/Embedded界面的实例。 假设我们正在开发一个智能家居控制系统,该系统具有温度控制、灯光控制和安全控制等功能。我们选择使用Qt/Embedded开发这个系统的用户界面。 首先,我们可以使用Qt/Embedded提供的工具和库来创建各种界面元素,如按钮、滑块、文本框等。我们可以使用这些元素来设计一个直观且易于使用的界面。 例如,我们可以创建一个温度控制的界面,其中包含一个滑块用于调节温度,并显示当前的温度值。当用户拖动滑块时,系统会根据用户的输入来调节温度。 另外,我们可以创建一个灯光控制的界面,其中包含几个开关按钮用于控制不同的灯光。当用户点击开关按钮时,系统会相应地打开或关闭对应的灯光。 还可以创建一个安全控制的界面,其中包含一个安全码输入框和一个解锁按钮。当用户输入正确的安全码并点击解锁按钮时,系统会解锁并执行相应的安全操作。 除了基本的界面元素外,Qt/Embedded还支持丰富的图形和动画效果。我们可以使用这些功能来增强界面的可视化效果,提升用户体验。 总之,Qt/Embedded提供了一个可靠和灵活的开发框架,使我们能够轻松地创建嵌入式系统的用户界面。通过使用Qt/Embedded,我们可以实现直观、易用且功能齐全的界面,使得用户能够方便地控制和操作嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值