嵌入式Linux系统中的GUI系统的研究与移植介绍
- 格式:docx
- 大小:23.08 KB
- 文档页数:8
GUI的种类及uCGUI的架构(说明:本博文转载自他人笔下,希望可以帮助同僚更深刻的认识GUI)GUI的种类及uC/GUI的架构一. GUI概述GUI(Graphic User Interface)是图形化的用户界面,它能提供友好的人机交互接口。
它有以下特性:体积小,运行时耗用系统资源少,层次化的结构,易移植,可靠性高嵌入式GUI种类嵌入式GUI种类有很多,下面列举几种:1. WINCE的GWES(图形、窗口、事件子系统),由应用程序接口(API)、用户接口(UI)和图形设备接口(GDI)组成,包含了消息机制2. Trolltech公司的产品:QT、QTE、QTOPIA,它们跨平台、功能强大,但资源消耗多3.MINIGUI是魏永明创建的嵌入式GUI中间件,可以以多线程、多进程、以及单任务运行,是比较成熟的商用系统4.ucGUI能支持多种环境的GUI,可以以多任务形式运行或者以前后台模式运行。
商用化,但功能相对简单GUI的两种模式:1. Windows模式,采用类似windows的API和相应的消息机制,如ucGUI、MicroWindows、miniGUI2.C/S模式,采用一个XServer,所有的显示都以客户端的形式请求服务,如Nano-XGUI在嵌入式系统或实时系统中的地位越来越多的市场需求数据显示,包括PDA、娱乐消费电子、机顶盒、DVD等影音设备、WAP 手机等高端电子产品得到广泛应用,原先仅在军工、工业控制等领域中使用的GUI图形系统,受到越来越多的关注。
对于轻量级 GUI 的系统而言,对 GUI 的要求相对较低,如传统51类型单片机这类系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和 GUI 之上,如 Windows 或 X Window。
目前此类系统都直接使用原有编程手段,采用比较简单的手法实现GUI。
对于太过庞大和臃肿的GUI系统而言,μc/GUI这类可运用于此类资源较紧张的轻型 GUI 的需求更加突出uc/GUI简介μc/GUI是美国Micrium公司出品的一款针对嵌入式系统的优秀图形软件。
嵌入式Linux系统中图片解码和显示的多格式支持方法嵌入式系统在现代科技中扮演着越来越重要的角色,而嵌入式Linux系统作为其中的一种,提供了强大的操作系统支持。
在嵌入式Linux系统中,图片解码和显示是一个常见的需求。
本文将介绍嵌入式Linux系统中图片解码和显示的多格式支持方法。
第一节:图片解码方法图片解码是将图片数据转换为可读取和显示的格式,常见的图片格式包括JPEG、PNG、GIF等。
在嵌入式Linux系统中,可以通过以下几种方法来实现图片解码:1. 使用开源库:开源库提供了丰富的图片解码功能,其中最为著名的是libjpeg、libpng和libgif等。
这些库提供了丰富的API接口,可以方便地进行图片解码操作。
在嵌入式Linux系统中,可以通过编译和链接这些库来实现图片解码功能。
2. 使用硬件加速:硬件加速可以大大提高图片解码的速度和效率。
现代的嵌入式处理器通常集成了专门用于图像处理的硬件加速模块,可以加速图片解码的过程。
通过调用相关的硬件接口,可以在嵌入式Linux系统中实现基于硬件加速的图片解码功能。
3. 自定义解码算法:根据特定需求,也可以开发自定义的解码算法。
通过分析图片文件的格式和结构,编写专门的解码程序,可以实现针对特定图片格式的解码功能。
这种方法需要开发者对图片格式有较深入的了解,并进行相关的算法开发和优化。
第二节:图片显示方法图片解码后,就可以将其显示在嵌入式系统的屏幕上了。
下面介绍几种常见的图片显示方法:1. 使用图形库:嵌入式Linux系统中常用的图形库有Qt、GTK等。
这些图形库提供了丰富的GUI接口和功能,可以方便地进行图片显示操作。
通过调用图形库提供的接口,可以实现在屏幕上显示解码后的图片。
2. 使用Framebuffer:Framebuffer是嵌入式Linux系统中常用的显示方式之一。
Framebuffer提供了一种直接访问显示硬件的方法,可以通过在Framebuffer上绘制解码后的图片来实现图片显示。
基于嵌入式ARM-Linux的播放器的设计与实现摘要随着21世纪的到来,人类进入了PC时代。
在这一阶段,嵌入式技术得到了飞速发展和广泛应用。
由此,本文提出了一种基于嵌入式ARM-Linux的播放器设计与实现的方案。
本文首先详细分析了ARM体系结构,研究了嵌入式Linux操作系统在ARM9微处理器的移植技术,包括交叉编译环境的建立、引导装载程序应用、移植嵌入式Linux内核及建立根文件系统,并且实现了嵌入式Linux到S3C2410开发板的移植。
由于嵌入式系统本身硬件条件的限制,常用在PC机的图形用户界面GUI系统不适合在其上运行。
为此,本文选择了Minigui作为研究对象,在对其体系结构等方面进行研究基础上,实现了Minigui到S3C2410开发板的移植,完成了嵌入式图形用户界面开发,使得系统拥有良好的操作界面。
对于播放器,本文实现了Linux系统下的通用媒体播放器—Mplayer到S3C2410开发板的移植。
通过对音频数据输出的研究,解决了Mp1ayer播放声音不正常的问题,实现了一个集音乐和视频播放于一体的嵌入式多媒体播放系统。
最后,总结了论文所做的工作,指出了嵌入式播放器所需要进一步解决和完善的问题。
关键词:嵌入式ARM-Linux; S3C2410; Mplayer; GUI界面; MiniguiPlayer Designing and Implement Based On Embedded ARM-LinuxAbstractAlong with the 21st century arrivals, the humanity enters the post PC time. In this stage, embedded technology gets rapidly developed and widely used. So, this paper aims to design a player based on embedded ARM-Linux.First, in this paper, ARM architecture and the characteristic are analyzed in detail. The emphasis of the study is put on the porting techniques of embedded Linux operation system based on the ARM9 micro-processor, which include setting cross complier、transplanting Bootloader、transplanting embedded Linux kernel and setting root file system; Furthermore, implement the technique of transplanting Embedded Linux to S3C2410 board.GUI (Graphical User Interfaces) systems which are supported by normal PCs cannot run well on the embedded systems, just because of the restriction of the hardware of embedded devices. So, this paper selects Minigui as research object. Based on the Minigui architecture and its other aspects, the technique of transplanting Minigui to S3C2410 board is given in detail, and then an embedded GUI system is established and it also makes the handle interface friendly.About the player, this paper implements transplanting the universal player on Linux-Mplayer to S3C2410 board. By learning of audio data, it solves the problem of sound abnormality, and achieves an embedded multimedia system which could play audio and video files.Key words: Embedded ARM-Linux; S3C2410; Mplayer; GUI interface; Minigui目录摘要 (I)Abstract ........................................................... I I 目录.............................................................. I II 第一章绪论.. (1)1.1系统研究背景 (1)1.1.1 多媒体播放器与嵌入式系统 (1)1.1.2 嵌入式多媒体播放器国内外发展现状 (1)1.2 嵌入式处理器 (3)1.3 嵌入式系统 (4)1.3.1嵌入式系统的概述 (4)1.3.2 嵌入式系统的选择 (5)1.4 本文的意义和主要工作 (7)第二章系统软硬件平台的搭建 (8)2.1 硬件开发平台的介绍 (8)2.1.1 核心板 (8)2.1.2 外设板 (8)2.1.3 设计所用硬件介绍 (9)2.2 硬件平台的设计方案 (9)2.2.1 核心板设计 (9)2.2.2 外设电路设计 (14)2.3 嵌入式软件开发环境 (15)2.3.1 引导装载程序 (16)2.3.2 宿主机开发环境配置 (17)2.3.3 交叉开发环境的建立 (18)2.3.4 内核的编译 (18)2.3.5 烧制内核映像和文件系统 (20)2.4 嵌入式图形用户界面的实现 (20)2.4.1 图形用户界面minigui的简介 (20)2.4.2 MiniGUI在S3C2410开发板上的移植过程 (21)第三章 Mplayer的移植 (25)3.1 Mplayer的简介 (25)3.2 Mplayer的移植 (25)3.2.1 安装交叉编译工具及解压源代码 (25)3.2.2 编译Mplayer (25)3.3 调试 (27)第四章嵌入式播放器Mplayer的设计 (31)4.1 播放器的工作流程 (31)4.2 播放器的逻辑结构 (31)4.3 Mplayer播放器的目录文件组织结构 (32)4.4 播放器对解码器和输出设备的管理方式 (34)第五章总结与展望 (36)5.1 本文主要完成的工作及结论 (36)5.2 完善与展望 (36)致谢 (37)参考文献: (38)第一章绪论1.1系统研究背景从上世纪末开始,随着计算机和电子技术的发展走上快车道,便携式电子设备,诸如智能手机,个人电子助理(PDA)的运算存储能力和通信能力都得到了长足的进步,便携式设备的用户界面也变的越来越友好,从早期的只能显示单色文字的LED,发展到现在大尺寸6万色彩色液晶屏幕。
嵌入式的有关知识1.什么是嵌入式?嵌入式的定义与特点?(1) 嵌入式系统的定义按照历史性、本质性、普遍性要求,嵌入式系统应定义为:“嵌入到对象体系中的专用计算机系统”。
“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。
对象系统则是指嵌入式系统所嵌入的宿主系统。
(2) 嵌入式系统的特点嵌入式系统的特点与定义不同,它是由定义中的三个基本要素衍生出来的。
不同的嵌入式系统其特点会有所差异。
与“嵌入性”的相关特点:由于是嵌入到对象系统中,必须满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。
与“专用性”的相关特点:软、硬件的裁剪性;满足对象要求的最小软、硬件配置等。
与“计算机系统”的相关特点:嵌入式系统必须是能满足对象系统控制要求的计算机系统。
与上两个特点相呼应,这样的计算机必须配置有与对象系统相适应的接口电路。
另外,在理解嵌入式系统定义时,不要与嵌入式设备相混淆。
嵌入式设备是指内部有嵌入式系统的产品、设备,例如,内含单片机的家用电器、仪器仪表、工控单元、机器人、手机、PDA 等。
2.什么是嵌入式系统嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。
3.什么是嵌入式操作系统?与其他操作系统相比,嵌入式有那些优势?嵌入式操作系统EOS(Embedded Op eratingSystem)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。
EOS负责嵌入系统的全部软、硬件资源的分配、调度工作,控制协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
嵌人式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
第1章 µC/GUI的介绍µC/GUIµC/GUI是一种用于嵌入式应用的图形支持软件。
它被设计用于为任何使用一个图形LCD 的应用提供一个有效的不依赖于处理器和LCD控制器的图形用户接口。
它能工作于单任务或多任务的系统环境下。
µC/GUI适用于使用任何LCD控制和CPU的任何尺寸的物理和虚拟显示。
它的设计是模块化的,由在不同的模块中的不同的层组成。
一个层,称作LCD驱动程序,包含了对LCD的全部访问。
µC/GUI适用于所有的CPU,因为它100%由的ANSI的C语言编写的。
µC/GUI很适合大多数的使用黑色/白色和彩色LCD的应用程序。
它有一个很好的颜色管理器,允许它处理灰阶。
µC/GUI也提供一个可扩展的2D图形库和一个视窗管理器,在使用一个最小的RAM时能支持显示窗口。
本文档的目的本指南描述如何安装,配置和在嵌入式应用中使用µC/GUI图形用户界面。
它也说明了软件的内部结构。
假设本指南假定你对C编程语言已经具有一个扎实的认识。
如果你觉得你对C语言的认识不是很充分的话,我们推荐该由Kernighan和Richie编写的“C语言编程语言”给你,它描述了程序设计标准,而在新版中,也包含了ANSI的C语言标准。
汇编语言编程的知识不需要。
µC/GUI中文手册第1页1.1 需求在你使用µC/GUI进行软件开发时,并不需要一个目标系统;只需要使用模拟器,大多数软件就能够进行开发。
然而,最后的目的通常是能够在一个目标系统上运行该软件。
目标系统(硬件)你的目标系统必须:• 有一个CPU(8/16/32/64位)• 有最少的RAM和ROM• 有一个完全的图形LCD(任何类型和任何分辩率)内存需求的变化取决于软件的哪些部分被使用以及你的目标编译程序的效率有多高。
所以指定精确值是不可能的,但是下面的数值适合典型系统。
嵌入式Linux系统中的GUI系统的研究与移植介绍嵌入式Linux系统中的GUI系统的研究与移植介绍摘要:针对嵌入式Linux系统中几种常见的GUI(Graphic User Interface)系统,讨论嵌入式GUI实现的底层技术方式;详细分析Microwindows、MiniGUI、Qt/Embedded等三种GUI的实现特点、体系结构、API接口。
结合这三种嵌入式GUI在以Motorola i,MX1为核心的实际应用系统中移植开发的问题,讨论移植技术与中文化技术。
引言嵌入式GUI为嵌入式系统提供了一种应用于特殊场合的人们交互接口。
嵌入式GUI要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。
另外,由于嵌入式系统硬件本身的特殊性,嵌入式GUI应具备高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。
总体来讲,嵌入式GUI具备以下特点:*体积小;*运行时耗用系统资源小;*上层接口与硬件无关,高度可移植;*高可靠性;*在某些应用场合应具备实时性。
(收集整理)1 基于嵌入式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等。
2 三种嵌入式GUI系统的分析与比较2.1 MicrowindowsMicrowindows是一个典型的基于Server/Clinent体系结构的GUI系统,基本分为三层,如图2所示。
最底层是面向图形显示和键盘、鼠标或触摸屏的驱动程序;中间层提供底层硬件的抽象接口,并进行窗口管理;最高层分别提供兼容于X Window和ECMA APIW(Win32子集)的API。
其中使用Nano-X接口的API与X接口兼容,但是该接口没有提供窗口管理,如窗口移动和窗口剪切等高级功能,系统中需要首先启动nano-X的Server程序nanoxserver和窗口管理程序nanowm。
用户程序连接nano-X的Server获得自身的窗口绘制操作。
使用ECMA APIW编写的应用程序无需nanox-server和nanowm,可直接运行。
Microwindows提供了相对完善的图形功能和一些高级的特性,如Alpha混合、三维支持和TrueType字体支持等。
该系统为了提高运行速度,也改进了基于Socket套接字的X实现模式,采用了基于消息机制的Server/Client传输机制。
Microwindows也有一些通用的窗口控件,但其图形引擎存在许多问题,可以归纳如下:*无任何硬件加速能力;*图形引擎中存在许多低效算法,如在圆弧图函数的逐点判断剪切的问题。
由于该项目缺乏一个强有力的核心代码维护人员,2003年Microwindows推出版本0.90后,该项目的发展开始陷于停滞状态。
2.2 MiniGUIMiniGUI是由国内自由软件开发人员设计开发的,目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。
MiniGUI的体系架构如图3所示。
MiniGUI分为最底层的GAL层和IAL层,向上为基于标准POSIX 接口中pthread库的Mini-thread架构和基于Server/Client的Mini-Lite架构。
其中前者受限于thread模式对于整个系统的可靠性影响——进程中某个thread的意外错误可能导致整个进程的崩溃,该架构应用于系统功能较为单一的场合。
Mini-Lite应用于多进程的应用场合,采用多进程运行方式设计的Server/Client架构能够较好地解决各个进程之间的窗口管理、Z序剪切等问题。
MiniGUI还有一种从Mini-Lite衍生出的standalone运行模式。
与Lite架构不同的是,standalone模式一次只能以窗口最大化的方式显示一个窗口。
这在显示屏尺寸较小的应用场合具有一定的应用意义。
MiniGUI的GAL层技术SVGA lib、LibGGI、基于framebuffer 的native图形引擎以及哑图形引擎等,对于Trolltech公司的QVFB在X Window下也有较好的支持。
IAL层则支持Linux标准控制台下的GPM鼠标服务、触摸屏、标准键盘等。
MiniGUI下丰富的控件资源也是MiniGUI的特点之一。
当前MiniGUI的最新版本是1.3.3。
该版本的控件中已经添加了窗口皮肤、工具条等桌面GUI中的高级控件支持。
2.3 QT/EmbeddedQt/Embedded是著名的Qt库开发商Trolltech公司开发的面向嵌入式系统的Qt版本。
因为Qt是KDE等项目使用的GUI支持库,许多基于Qt的X Window程序因此可以非常方便地移植到Qt/Embedded上。
Qt/Embedded同样是Server/Client结构。
Qt/Embedded延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用framebuffer作为底层图形接口。
同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏以及用户自定义的设备等。
Qt/Embedded类库完全采用C++封装。
丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面。
它的类库接口完全兼容于同版本的Qt-X11,使用X下的开发工具可以直接开发基于Qt/Embedded的应用程序QUI界面。
与前两种GUI系统不同的是,Qt/Embedded的底层图形引擎只能采用framebuffer。
这就注定了它是针对高端嵌入式图形领域的应用而设计的。
由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱,各种补丁较多的问题。
Qt/Embedded的结构也过于复杂臃肿,很难进行底层的扩充、定制和移植,尤其是用来实现signal/slot机制的moc文件。
Qt/Embedded当前的最新版本为3.3.2,能够支持Trolltech的手持应用套件Qtopia的Qt/Embedded最高版本为2.3.8。
Trolltech 公司将于2004年末推出的Qt/Embedded 3为基础的Qtopia 2应用套件。
3 三种嵌入式GUI的移植与中文化在进行以上三种嵌入式GUI的研究和移植过程中,硬件平台采用自行设计的以Motorola MC9328 MX1为核心的开发系统。
该系统采用CPU内部LCD控制器和320×240分辨率的16bpp TFT LCD作为显示设备,使用I2C总线扩展出16按键的键盘,同时配置了9位A/D 量化精度的电阻触摸屏作为鼠标类输入设备;同时移植了ARM Linux 作为操作系统。
以下分别讨论这三种嵌入式GUI的底层移植和中文化技术。
移植以上三种嵌入式GUI系统,需要首先实现Linux内核中的framebuffer驱动。
对应于开发系统为MC9328中的LCD控制器,该部分驱动程序必须以静态方式编译进内核,在系统启动时由传递进内核的启动参数激活该设备。
I2C键盘的驱动程序和触摸屏的驱动程序实现后,作为Linux内核模块在使用时动态加载。
3.1 Microwindows的移植Microwindows驱动层相应的源码目录为src/drivers/。
其中以scr*开头的源码是针对显示设备的驱动接口,以mou*开头的源码文件为鼠标设备(包括触摸屏)的驱动接口,以kbd*开头的源码文件针对键盘设备的驱动接口。
移植过程中需要实现自己的设备驱动接口提供给Microwindows使用,就必须按照指定的接口格式编写相应的scr、mou、kbd的底层支持。
这种方式实现简单,条理也很清晰。
显示设备驱动接口:Microwindows的图形发生引擎支持framebuffer,修改src/中的config文件指定使用framebuffer作为底层图形支持引擎;但需要注意嵌入式Linux的framebuffer较少支持控制台字符模式,需要修改Microwindows中对framebuffer的操作部分以关闭显示模式的转换。
在应用程序开发移植中需要注意的是:使用ECMAAPIW接口设计的程序无需nano-X的Server程序和nanowm。
系统中可以直接启动使用该接口编写的用户程序;但需要注意的是,一个系统中如同时存在使用两种不同的API接口编写的进程,会造成nano-X的Server 与ECMA APIW的进程对系统硬件资源的使用竞争,双方的程序将无法正常显示或响应应用户输入。
在为Microwindows增加中文显示的支持时,主要工作包括两个部分。
一部分是系统字体的中文支持。
此处使用等宽光栅字体,主要负责窗口标题和内置控件的中文绘制,将字体编译进Microwindows 内核中,光栅信息作为一维数组,显示时按照字符偏移量从该数组中调出相应的光栅信息显示即可。
除此之外,当程序调用CreateFont时,需要在内部实现为打开文件系统中的字体文件。
通过修改src/engine/devfont.c中的GdCreateFont部分,添加相应的hzk(汉字库)支持,便可以实现在CreateFont时创建出一个支持GB2312字符集的逻辑字体,并使用外部字体进行显示。
在应用程序设计时,如果没有调用SelectObjectu将外部字体选入,中文显示时将默认使用系统字体。
3.2 MiniGUI由于MiniGUI较好地将硬件设备抽象为GAL层和IAL层,移植时只需要针对自身的`硬件特点按照GAL层调用接口和IAL层调用接口来做内部实现即可。
图4为MiniGUI的GAL层结构示意,IAL层结构类似。
实现了framebuffer的Linux驱动后,配置MiniGUI选择Native 的GAL引擎,便可以使用framebuffer作为MiniGUI的图形发生引擎。
MiniGUI的IAL层将输入设备的输入事件最终映射为GUI系统API 层的消息事件。
IAL层默认处理两种设备的输入操作:键盘设备和鼠标设备。