基于嵌入式Linux图形用户接口的实现方法

发布者:Coboro最新更新时间:2011-12-22 来源: 电子产品世界关键字:Linux 手机看文章 扫描二维码
随时随地手机看文章

随着Internet与网络的迅速发展 并向家庭领域不断扩展,使消费电子、计算机、通信(3C)一体化趋势日趋明显,嵌入式系统再度成为研究与应用的热点。嵌入式实时Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,如今随着WAP手机、PDA、机顶盒、及DVD/VCD播放机已经迅速普及,用户对这些手持式设备的GUI提出了更高的要求,希望能看到像PC机才拥有的华丽美观的GUI。GUI已经成为了人与机器沟通的桥梁,嵌入式系统对GUI的需求越来越高,而这一切均要求有一个轻型、占用资源少、高性能、高可靠、可配置及美观的GUI支持。

  1 Java的图形界面工具

  Java技术对于服务器,个人电脑和嵌入式系统来说是一项伟大的技术。由于其具有跨平台等特性。Java在服务器和桌面电脑方面的应用是非常成功的。然而在GUI方面,Java只用非常有限的一些特征去构建图形用户界面。其思想就是采用平台无关的Java应用程序接口打包到不同的操作系统来开发本地图形用户界面,被称之为抽象的窗口工具(AWT)。仅有普通的部件如文件域、文本区、选择框、单选按钮、列表框和按钮被AWT支持,图形和图像的特性支持非常有限,也就是说,只足够构建简单的applet程序。认识到需要更高级的图形用户界面组件和图形能力,Sun公司开发了Swing,Java 2D,Java3D,图像的输入/输出,以及Java高级图像(JAI)。Swing是用来构建Java图形界面的标准API(应用程序接口),一些AWT类由Swing基础而来。它有一套完全的组件从按钮到文件域、表格、树型和文件编辑器。这些组件不依赖于操作系统本地的部件,而是用原始的图形像直线、矩形、文字画出。这种画代表感观插件,它能够模仿本地的感观。SWT是基于Java开发的,它的设计理念是最大化了操作系统的图形构件的API,就是说只要操作系统提供了相应图形的构件,那么SWT只是简单应用JNI技术调用它们,只有那些操作系统中不提供的构件,SWT才自己去做一个模拟的实现。另外SWT还提供对操作系统本地图形用户界面的直接访问,因此,基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。使用SWT开发包,简单、跨平台、可靠等这些Jaya语言本身所具有的优点正渐渐融合到图形界面的应用程序开发中去。Java语言的另一扇成功之门正在逐渐打开。

  2 SWT+GtkFB图形系统的体系结构

  2.1 SWT+GtkFB图形系统的体系结构

SWT

 

  2.1.1 SWT

  SWT处于体系机构的最上层,它与Java内的AwT和Swing同属于设计图形界面所需的高级函数库。而且SWT针对AWT 以及Swing的一些问题作了改善,如今它已发展成一套与作业系统无关的图形元件函数库。在元件的产生方面采用了适当的模拟,在基本的元件方面是采用原有作业系统的,对于较复杂的元件才用仿真的技术。基于SWT的Java应用程序拥有本地的图形用户界面,并且可以和本地别的应用程序,以及部件集成在一起。

  SWT是基于Java语言开发出来的高级图形元件库,如图2所示SWT在Java端通过JNI(Java Native InteRFace)技术直接调用native端的GtkFB来使用操作系统的资源,JNI技术使得SWT程序可以与其他语言编写的Native端的代码互相协作,将它们整合在一起;另一方面可使运行在JVM(JAava虚拟机)中的SWT代码调用GtkFB库函数或其他程序;此外利用Invocation API,可将Java虚拟机嵌入到native端的应用中。JNI这个接口是双向的,相当于桥梁和纽带,它将SWT代码和native端的GtkFB代码连接起来。

SWT在Java端通过JNI(Java Native Interface)技术直接调用native端的GtkFB来使用操作系统的资源

  2.1.2 Gtk库

  如图1所示,GTK会用到几个连接库,如基本数据类型用的Glib库,它是由基础类、核心应用支持类、实用功能类、数据类和对象系统类五个部分组成的。

  Pango是用于国际化文本的布局和显示的全功能框架。Pango可以处理以非从左到右方向排列的文本,并且可以容易地管理复杂语言,甚至还可以处理根据使用环境而采用不同形式的信函。例如它支持双向文本,用户可以将从左到右的文本和从右到左的文本混合编排;还可有用于确定各种复杂文本(如阿拉伯语和泰米尔语)形状的插件。Pango不仅仅是国际化,而且Pango库在Xft和XRender的支持下能很好地处理抗锯齿字体文本的显示。

  Pango还支持各种图形格式如libpng,libjpeg,libtiff和Framebuffer port用的FreeType等。实际上GTK提供gdk-pixbuf,gdk和gtk三个连接库,其中Gdk-pixbuf让我们可做相关的图像工作,gdk是窗口绘图系统的抽象层,framebuffer相关的工作大部分在此完成,而gtk则是高层的应用程序接口。


  Atk(Accessibility Toolkit)可访问性工具箱。GTK充分利用ATK使残障人士(如视力低下或行动不便)与GTK应用程序交互成为可能。

2.1.3 GtkFB的工作原理

  DirectFB访问图形硬件设备依赖于操作系统提供的内核接口,即帧缓冲设备(FrameBuffer)。FrameBuffer实际上是用一块硬件来做显卡和软件之间的桥梁,Linux的内核将其开放出来,使用户的程序可以通过块内存来存取显卡。例如设定显示分辨率和色彩数、存取显示内存区等。不同的Linux需要提供针对不同显示硬件FrameBuffer的驱动程序,这就是说DirectFB需要运行于FramBuffer之上,然而Linux内核提供了常见芯片的FrameBuffer驱动。

  当一个应用程序连接到GtkFB时会调用gtk_init(),如图3所示,此时GtkFB 启动Linux的Framebiffer,设定分辨率和色彩数,接下来打开键盘和鼠标等外设(PDA打开按键和触控屏幕).然后到特定目录去读取字型,最后对窗口和事件管理作初始化操作。GtkFB可以支持8、16、24、32bpp的framebuffer。

Gtk通过DirectFB访问FrameBufer设备和图形设备

  为了执行一个特定的图形操作,DirectFB芯片驱动程序将访问图形设备内存映射的I/O端口,并且把命令传递到图形设备卡的加速引擎。实际的硬件加速是完全在用户空间内完成的。

  2.2 SWT+GtkFB图形系统的优点

  2.2.1 内存消耗小、运行速度快特别适合嵌入式产品

  由于GtkFB直接运行在FrameBufer之上,跳过X系统,这样省下了X Server这一部分资源,这使得在内存消耗、运行速度上得到显著提高。另外采用的JNI技术使得程序运行速度、事件的响应有较高的提高,能满足时间要求较为严格的实时应用场合。

  2.2.2 系统稳定性好

  SWT 的稳定性,关键是源于SWT 的设计理念。SWT最大化了操作系统的图形构件API,就是说只要操作系统提供了相应图形的构件,那么SWT只是应用JNI技术调用它们,只有那些操作系统中不提供的构件,SWT才自己去做一个模拟的实现。可以看出SWT性能上的稳定很大程度上取决于相应操作系统图形构件的稳定性。

  2.2.3 易于移植和共享

  SWT的API和桌面版完全相同,因而代码可以很容易地在桌面和嵌入式设备之间移植与共享。

  2.2.4 小巧可配置

  SWT采用了LGPL授权方式,用户可以自由地甚至是鼓励修改源代码使其更加满足用户的需求,很容易根据用户的需求来裁减特定的SWT+GtkFB,依据LGPL许可证,用户需要公布修改的源代码,但用户不必公布自给应用程序的源代码。

  2.2.5 易于开发

  SWT是基于Java语言开发的,具有平台独立性、面向对象、可移植、安全等Java语言所拥有特点。用户可以很容易的基于SWT提供的Widget(构件)开发出满足自己需要的Widget,而且很容易地使用这些Widget去构建应用程序。

3 SWT+GtkFB图形系统的实现

 3.1 前期准备

  在Linux编译和安装SWT+GtkFB,首先到http://www.gtk.org/download下载如下的包:pkg-config、glib2.x;atk、pango、DirectFB、gtk+2.x。其次到http://www.eclipse.org/download下载swt.tgr.gz。

  下一步就是在/home/XXX/目录下创建SWT 和GTK两个目录并且设置环境变量。如下:

  export SWT_HOME=/home/XXX/SWT

  export SWT_HOME=/home/XXX/GTK

  export PKG_CONFIG_PATH=$GTK_HOME /lib/pkgconfig

  export LD_LIBRARY_PATH=$GTK_HOME/lib;$LD_LIBRARY_PATH

  此外增加“/home/XXX/GTK/bin”到系统的环境变量PATH下。

  3.2 编译和安装Gtk+2.0

  3.2.1 编译和安装pkg-config

  tar zxvf glib-2.0.6.tar.gz -C $GTK_HOME/src

  cd $GTK HOME/src/glib-2.0.6

  ./configure --prefix=$GTK_HOME

  make


  make install

  3.2.2 编译和安装atk

  tar zxvf atk-1.0.1.tar.gz -C $GTK_HOME/src

  cd $GTK_HOME/src/atk-1.0.1

  ./configure --prefix=$GTK_HOME

  make

  make install

  3.2.3 编译和安装pango、Direct FB、gtk+2.0 、swt-forgtk2.2

  步骤类似atk的安装。

  4 嵌入式Linux GUI的应用前景展望

  嵌入式Linux GUI的应用领域很多,既可以用于家电市场,还可以用于商业市场、工业及自动化市场、国防市场、通讯市场等。例如,在通讯市场,手机、可视电话、机顶盒等可能成为嵌入式Linu.x的运行平台,一个人性化的用户界面是赢得消费者关键因素。因此嵌入式Linux图形系统将担任着更加重要的角色。

  未来几年,嵌入式Linux GUI将朝以下方向发展:第一,轻型、占用资源少,不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI之上。第二,高性能、高可靠性,特别是工业实时控制系统,对实时性的要求非常高,并且比起嵌入式系统来说,对GUI的要求也更高。第三,可配置,我们必须清楚的意识到,嵌入式系统是一种定制设备,它们对GUI的需求各不相同,有的系统只要求一些图形功能,而有些系统要求完备的GUI支持,因此,GUI也必须是可定制的。

关键字:Linux 引用地址:基于嵌入式Linux图形用户接口的实现方法

上一篇:PMON的软件架构由Nucleus移植到Linux设计方案
下一篇:基于USB从机技术的绝缘电阻表自动检定系统通信接口设计

推荐阅读最新更新时间:2024-03-30 21:52

基于Linux的嵌入式工业测控系统
1 、前言 随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用。工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点。随着32位嵌入式CPU价格的下降,性能指标的提高,为嵌入式系统的广泛应用和Linux在嵌入式系统中的发展提供了广阔的空间。由于Linux的高度灵活性,可以容易地根据应用领域的特点对它进行定制开发,以满足实际应用需要。 2 、基于Linux的嵌入式系统在测控系统中的设计 计算机测控系统本质上就是计算机控制系统,为了对被控对象实施控制,对其参数和状态进行检测是必不可少的。 2.1 测控系统整体设计 测控系统以基于Linux的嵌入式系统为核心,应用程序可通过
[应用]
ARM Linux中断向量表搬移设计过程
Preface 引言 我在这里用一些篇幅来描述一下arm体系结构下Linux中怎样来初始化中断向量表的,因为这个方法很具有通用性,我把它叫做代码大挪移。您说搬代码谁不会阿,不就是拷贝吗,的确如此,但是拷贝也有技巧。拷贝很简单啦,其实就是memcpy,这不用提,我在这里想说的是,你怎么把你的代码设计成能随便拷贝的,换句专业的术语,叫与位置无关的代码,拷到哪都能用。我以前也用过类似的方法作启动,今天拿来说说。 Scenario 1 第一场景 copy 我们先看实际动作。代码的位置在arch/arm/traps.c中,kernel version: 2.6.27。 这个是初始化部分的代码,setup_arch()- early
[单片机]
ARM <font color='red'>Linux</font>中断向量表搬移设计过程
ARM矩阵键盘设计及其linux驱动实现
在嵌入式系统开发中,经常通过键盘来实现人机交互。本文介绍了一种直接利用ARM的I/O口扩展矩阵键盘的方法。同时以TQ2440开发板为例,对硬件电路连接和相应的linux驱动设计方法都作了详细说明。 1.引言 ARM微处理器已广泛应用于工业控制、消费类电子产品、通信系统等领域。矩阵键盘是一种常用的键盘形式,它将按键设计成M行N列,这样共需M+N根信号线,却可驱动M×N个按键,大大节约了I/O资源。本文介绍了一种利用TQ2440开发板的GPIO口扩展5×4矩阵键盘的方法,并将所有按键重新布局成手持终端的键盘形式,方便操作。 2.硬件设计 本设计扩展5行4列的矩阵键盘,如图1所示。其中行线ROW1-ROW5连接S3C24
[单片机]
ARM矩阵键盘设计及其<font color='red'>linux</font>驱动实现
ARM平台嵌入式Linux下SPI设备连接
简介:在嵌入式ARM平台设备上,经常有在一个SPI bus上面挂接一个或者多个SPI设备的需求,由于挂载一个设备的情况比较简单,本文主要就在嵌入式Linux环境下挂载多个SPI设备进行说明。 本文所采用的硬件为Toradex 公司Colibri VF61计算机模块和开发载板,核心为Cortex-A5和M4异构双核,这里A5运行Toradex官方发布的Embedded Linux BSP V2.5,M4核心这里不做使用。 本文涉及Toradex发布Embedded Linux源码下载,Device Tree 定制编译,相关操作请参考下面文章,本文不做赘述。 http://developer.toradex.com/kno
[单片机]
arm驱动linux内核链表
《 linux内核链表》涉及内核驱动函数五个,内核结构体一个,分析了内核驱动函数二个;可参考的相关应用程序模板或内核驱动模板零个,可参考的相关应用程序模板或内核驱动一个 一、描述   链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。Linux内核中使用了大量的链表结构来组织数据。这些链表大多采用了include/linux/list
[单片机]
Linux系统下搭建C/C++开发的IDE环境
  RedHat Linux上面没有提供Anjuta软件包,上面提供了一个Glade应用程序界面设计工具。Linux上面使用Anjuta和Glade以及 Glademm软件包可以搭建一个Linux下面进行C/C++软件开发的IDE环境,可以进行GTK+/Gnome的应用程序开发。   以前开发 Linux 程序时写出好的图形化用户界面比较难。 在 GIMP 工具包 (GTK)诞生之后,这件事就变得比较容易了。当 Damon Chaplin 写出 GLADE 这个用于在 GTK 环境下生成图形化用户界面的工具后,就更容易了。但是 GLADE 仍然不能算是一个“集成开发环境”(如 Visual Basic 等等。), 因为程序员不能
[嵌入式]
嵌入式Linux的动态电源管理技术
摘要 在SoC硬件对电源管理支持基础上,通过设计电源管理操作点、管理类、管理策略等结构,把系统创建的任务和具体电源管理硬件参数联系起来,为任务间精细电源管理提供包括应用层、操作系统层以及硬件层的框架结构。结合用户层制定的策略,实时、动态、低延迟管理系统动态功耗,调整CPU工作频率和电压、外部总线时钟频率、外部设备时钟/电源参数。实践证明,节能效果良好。 关键词 嵌入式Linux 动态电源管理 智能终端 DPM 引 言 如何有效地管理嵌入式系统,尤其是移动终端的电源功耗,是一个很有价值的课题。动态电源管理DPM(Dynamic Power, Management)技术提供一种操作系统级别的电源管理能力,包含CPU工作频率和电压,
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved