热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

面向实时嵌入式系统的图形界面支持系统

文章标题:面向实时嵌入式系统的图形界面支持系统。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  嵌入式 Linux 系统的 GUI 发展概况
  
  1.1 GUI 在嵌入式或实时系统中的地位
  
  在常见的 PDA 等小型手持式设备上,由于硬件条件等的限制,我们看到的用户界面都非常简单,几乎看不到我们在 PC 机看到的华丽美观的 GUI 支持。但最近出现的 Palm 等手持式电脑或者在 Windows CE 等面向嵌入式系统的操作系统上,我们已经看到了完整的图形用户界面支持。随着手持式设备的硬件条件的提高,我们估计嵌入式系统对轻量级 GUI 的需求会越来越迫切。
  
  近来的市场需求显示,越来越多的嵌入式系统,包括 PDA、机顶盒、DVD/VCD 播放机、WAP 手机等等系统均要求提供全功能的 Web 浏览器。这包括 HTML 4.0 的支持、Javascript 的支持,甚至包括 Java 虚拟机的支持。而这一切均要求有一个高性能、高可靠的 GUI 的支持。
  
  另外一个迫切需要轻量级 GUI 的系统是工业实时控制系统。这些系统一般建立在标准 PC 平台上,硬件条件相对嵌入式系统要好,但对实时性的要求非常高,并且比起嵌入式系统来说,对 GUI 的要求也更高。这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和 GUI 之上,比如 Windows 或 X Window。目前许多这类系统都建立在 DOS 等系统上,并且采用比较简单的手法实现 GUI。但是,在出现 Linux 系统之后,尤其在 RT-Linux 系统出现之后,许多工业控制系统开始采用 RT-Linux 作为操作系统,但 GUI 仍然是一个问题。关键是 X Window 太过庞大和臃肿。这样,这些系统对轻型 GUI 的需求更加突出。
  
  但是,我们必须清楚的是,嵌入式系统往往是一种定制设备,它们对 GUI 的需求也各不相同。举个简单的例子,有的系统只要求一些图形功能,而有些系统要求完备的 GUI 支持。因此,GUI 也必须是可定制的。
  
  综上所述,GUI 在嵌入式系统或者实时系统中的地位将越来越重要,这些系统对 GUI 的基本要求包括:
  1.轻型、占用资源少。
  2.高性能。
  3.高可靠性。
  4.可配置。
  
  1.2 目前实时嵌入式系统 GUI 的实现方法
  
  尽管实时嵌入式系统对 GUI 的需求越来越明显,但目前 GUI 的实现方法各有不同:
  
  1.某些大型厂商有能力自己开发满足自身需要的 GUI 系统。
  2.某些厂商没有将 GUI 作为一个软件层从应用程序中剥离,GUI 的支持逻辑由应用程序自己负责。
  3.采用某些比较成熟的 GUI 系统,比如 MiniGUI 或者其他 GUI 系统。
  
  在上述手段中,第 2 种方法是一种临时解决方案。利用这种手段编写的程序,无法将显示逻辑和数据处理逻辑划分开来,从而导致程序结构不好,不便于调试,并导致大量的代码重复。我们认为 GUI 是一种类似于操作系统的基础软件,这种软件系统应该遵循一定的标准,并且应该是开放源码的自由软件,从而可以让开放商集中精力开发自己的应用程序。目前看来,在 Linux 之上进行(实时)嵌入式系统开发的厂商,一般选择如下几种 GUI 系统:紧缩的 X Window 系统、MiniGUI、MicroWindows、OpenGUI、QT/Embedded 等,下面首先对这些系统进行简单介绍,并对它们的优缺点进行比较。
  
  1.2.1 紧缩的 X Window 系统
  
  众所周知,X Window 是 Linux 以及其他类 UNIX 系统的标准 GUI。X Window 系统采用标准的客户/服务器体系结构,具有可扩展性好、可移植性好等优点。但该系统的庞大、累赘和低效率也是大家所共知的。为了获得应用程序的可移植性,许多厂家都试图通过对 X Window 系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为 800K 的 X 服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。但该系统的源代码尚不开放,从而很难进行本地化开发。
  
  1.2.2 MicroWindows
  
  MicroWindows 是一个开放源码的项目,目前由美国一家公司在主持开发。该项目的开发非常活跃,国内也有人参与了其中的开发,并编写了 GB2312 等字符集的支持。该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如 Alpha 混合,三维支持,TrueType 字体支持等。但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。值得一提的是,该项目的许多控件是从 MiniGUI 中移植过去的,扫雷游戏也是从 MiniGUI 中移植过去的。
  
  该项目已经启动了一个开放源码的浏览器项目,该浏览器在 KDE kfm 提供的 HTML 解释器的基础上开发,目前能够解释一些简单的 HTML 页面。
  
  1.2.3 OpenGUI
  
  OpenGUI 在 Linux 系统上存在已经很长时间了。最初的名字叫 FastGL,只支持 256 的线性显存模式。但目前也支持其他显示模式。这个库是用 C++ 编写的,只提供 C++ 接口。
  
  1.2.4 Qt/ Embedded
  
  QT/Embedded 是著名的 QT 库开放商正在进行的面向嵌入式系统的 QT 版本。这个版本的主要特点是可移植性较好,许多基于 QT 的 X Window 程序可以非常方便地移植到嵌入式版本。但是该系统不是开放源码的,如果你要使用这个库,可能需要支付昂贵的授权费用。目前,已经有了 QT/Embedded 的演示版,预计明年初将出现 QT/Embedded 的正式发行版。
  
  1.3 MiniGUI 简介
  
  MiniGUI 是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于 Linux 控制台,实际可以运行在任何一种具有 POSIX 线程支持的 POSIX 兼容系统上。MiniGUI 同时也是国内最早出现的几个自由软件项目之一。
  
  MiniGUI 的主要特色有:
  
  遵循 LGPL 条款的纯自由软件。
  提供了完备的多窗口机制。这包括:
  多个单独线程中运行的多窗口。
  单个线程中主窗口的附属。
  对话框和预定义的控件类(按钮、单行和多行编辑框、列表框、进度条、工具栏等)。
  消息传递机制。
  多字符集和多字体支持,目前支持 ISO8859-1、GB2312、Big5 等字符集,并且支持各种光栅字体和 TrueType、Type 1 等矢量字体。
  全拼、五笔等汉字输入法支持。
  BMP、GIF、JPEG、PCX、TGA 等常见图像文件的支持。
  Windows 的资源文件支持,如位图、图标、光标等。
  插入符、定时器、加速键等。
  其他(Beep、ETC/INI 文件操作等)。
  小巧。包含全部功能的库文件大小为 300 K左右。
  可配置。可根据项目需求进行定制配置和编译。
  高稳定性和高性能。MiniGUI 已经在Linux 发行版安装程序、CNC 系统、蓝点嵌入式系统等关键应用程序中得到了实际的应用。
  可移植性好。目前,MiniGUI 可以在 X Window 和 Linux 控制台上运行。中科院 EEOS 开发组已经成功地将 MiniGUI 移植到了他们的 POSIX 兼容系统上。蓝点软件(北京)研发中心也已经成功地将 MiniGUI 移植到了两款基于 Strongarm 的嵌入式系统上。
  
  1.4 各种面向实时嵌入式系统的 GUI 之比较
  
  比较上述几个面向嵌入式系统的 GUI,我们认为目前比较成熟,同时得到最多开发人员认可的有紧缩的 X Window 系统、MiniGUI、MicroWindows 等系统。尽管紧缩的 X Window 系统其 X 服务器可以降低到 800K 的大小,但因为 X Window 系统的运行还需要其他程序和库的支持,包括 X 窗口管理器、XLib、建立在 XLib 之上的 GTK 和 QT 等函数库,因此,紧缩的X Window 系统在运行期间所占用的系统资源很多,加上中文显示和中文输入等本地化代码之后,系统的整体尺寸和运行时的资源消耗将进一步变大。因此,嵌入式系统的开发商往往将紧缩的 X Window 系统定位在机顶盒等对资源要求并不苛刻的嵌入式系统上。
  
  MiniGUI 和 MicroWindows 均为自由软件,只是前者遵循 LGPL 条款,后者遵循 MPL 条款。这两个系统的技术路线也有所不同。MiniGUI 的策略是首先建立在比较成熟的图形引擎之上,比如 SVGALib 和 LibGGI,开发的重点在于窗口系统、图形接口之上;MicroWindows 目前的开发重点则在底层的图形引擎之上,窗口系统和图形接口方面的功能还比较欠缺。举个例子来说,MiniGUI 有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括 GB、BIG5、UNICODE 等,而 MicroWindows 在多字符集的支持上尚没有统一接口。
  
  MiniGUI 的重要特色
  
  2.1 设计目标:小巧和可配置
  
  MiniGUI 最初是为了满足一个工业控制系统(计算机数控系统)的需求而设计和开发的。这个工业控制系统是清华大学为一台数控机床设计的计算机数控系统(CNC)。在比较 DOS、Windows 98、Windows NT、Linux 等系统之后,该项目组决定选择 RT-Linux 作为实时操作系统,以便满足 2ms 甚至更高的实时性。但是图形用户界面是一个问题,因为 X Window 不适合于实时控制系统,并且当时 X Window 系统的本地化也不尽人意。因此,决定自己开发一套图形用户界面支持系统。这就是 MiniGUI 产生的背景。显然,MiniGUI 一开始就针对实时系统而设计,因此,在设计之初就考虑到了小巧、高性能和高效率。目前,这个数控系统的开发已近尾声,MiniGUI 在其中担当了非常重要的角色。
  
  在考虑到其他不同于数控系统的嵌入式系统时,为了满足千变万化的需求,必须要求 GUI 系统是可配置的。在 CNC 系统中得到成功应用之后,我们立即着手于 MiniGUI 可配置的设计。我们通过 Linux 下的 automake 和 autoconf 接口,实现了大量的编译配置选项,通过这些选项可指定 MiniGUI 库中包括哪些功能而同时不包括哪些功能。
  
  因此,MiniGUI 是一个非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。
 
推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
author-avatar
琴瑟_0203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有