嵌入式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 lvgl 实例Linux LVGL 实例LVGL(Light and Versatile Graphics Library)是一个开源的图形库,用于嵌入式系统和应用程序的图形用户界面(GUI)开发。
它提供了一系列功能强大且易于使用的API,允许开发人员创建漂亮而现代的图形界面。
本文将以Linux LVGL 实例为主题,为您介绍这个强大的工具,并提供一步一步的指导。
让我们开始!第一步:安装LVGL首先,我们需要安装LVGL 库。
您可以通过在终端中运行以下命令来完成安装:sudo apt-get install lvgl这将自动下载和安装LVGL 的最新版本。
第二步:创建LVGL 应用程序接下来,我们将创建一个示例应用程序来演示LVGL 的功能。
在您选择的目录中,创建一个新的文件夹,并命名为“lvgl_example”。
进入该文件夹,并创建一个名为“main.c”的新文件。
cd lvgl_exampletouch main.c然后,将以下代码复制到“main.c”文件中:c#include <stdio.h>#include <lvgl.h>int main(void){lv_init();lv_obj_t * scr = lv_disp_get_scr_act(NULL); Get the current screenlv_obj_t * label1 = lv_label_create(scr, NULL); Create a label objectlv_label_set_text(label1, "Hello World!"); Set the textlv_task_handler();return 0;}这是一个简单的LVGL 应用程序的示例,它在屏幕上显示“Hello World!”。
第三步:构建和运行LVGL 应用程序现在,我们可以使用下面的命令来构建我们的应用程序:gcc -o lvgl_example main.c -llvgl -lm这将编译并链接我们的代码以及LVGL 库。
基于ucGUI多任务系统的图形用户界面开发吴建鲁江苏自动化研究所,江苏连云港 (222006)E-mail:wujianlucool2006@摘要:图形用户界面是人与计算机进行交互的一种操作方式,它的质量直接影响着产品的推广和用户的使用效率。
针对嵌入式系统中图形用户界面应用的广泛需求,本文介绍ucos-II 和ucGUI在S1C33209上的移植过程,并在此基础上实现了ucGUI多任务系统中图形用户界面的开发。
关键词:ucos-II; ucGUI; 移植;图形用户界面1 引言与命令式用户界面(Command Line Iser Interface)不同,图形用户界面(Graphical User Interface,GUI)不需要用户通过输入专业性很强的抽象命令来操作计算机,而代之以窗口、图标、菜单等直观的图形或图标,再加上可以控制光标移动的指示装置来完成数据和控制命令的输入,从而实现对计算机的交互式操作。
由于这样的用户界面不需要记忆专门性很强的控制命令并且非常直观易懂,图形用户界面受到了普遍的欢迎[1]。
ucGUI是Micrium公司出品的一款针对嵌入式系统的开放源代码的优秀图形软件,它为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口。
适用于单任务或是多任务系统环境,并适用于任意LCD控制器和CPU下任何尺寸的真实显示与虚拟显示。
架构基于模块化设计,由不同的模块中的不同层组成。
采用100%的标准C代码编写,由一个LCD驱动层来包含所有对LCD的具体图形操作,ucGUI可以在任何CPU上运行。
在ucGUI单任务系统中,程序顺序的执行,一个软件单元的反应时间依赖于这个系统中所有其他单元的执行时间,实时行为变得极为有限。
为了增强实时性,采用ucGUI多任务系统,使用开放源代码ucos-II实时内核,把应用程序分割成不同的部分运行在不同的任务中,具有不同的优先级。
这样,任务的实时行为只受运行在更高优先级的任务影响,系统的实时性得到极大的改善。
MiniGUI 的技术优势
MiniGUI 的技术优势
和其它针对嵌入式产品的图形系统相比,MiniGUI 在对系统的需求上具有如下几大优势:
1) 可伸缩性强
MiniGUI 丰富的功能和可配置特性,使得它既可运行于CPU 主频只有60MHz 的低端产品中,
亦可运行于高端嵌入式设备中,并使用MiniGUI 的高级控件风格及皮肤界面等技术,创建华丽的用户界面。
MiniGUI 的跨操作系统特性,使得MiniGUI 可运行在最简单的嵌入式操作系统之上,如
uC/OS-II,也可以运行在具有现代操作系统特性的嵌入式操作系统之上,如Linux,而且MiniGUI 为嵌入式Linux 系统提供了完整的多窗口图形环境。
这些特性,使得MiniGUI 具有非常强的可伸缩性。
可伸缩性是MiniGUI 从设计之初就考虑且不
断完善而来的。
这个特性使得MiniGUI 可应用于简单的行业终端,也可应用于复杂的消费类电子产品。
2) 轻型、占用资源少
MiniGUI 是一个定位于轻量级的嵌入式图形库,对系统资源的需求完全考虑到了嵌入式设备的硬件。
实验报告--------- U-Boot的分析与移植实验目的●了解嵌入式开发的基本思想和过程●深入理解BootLoader,通过分析一款具体的BootLoader -- U-boot ,掌握BootLoader的作用,及其运行过程。
实验内容●本次实验具体分析uboot中基于arm9 系列为内核的开发板的bootloader的相关代码;●分析在uboot中,bootloader怎么与linux内核进行交互;●搭建交叉编译环境,将bootloader编译成在开发平台上能用的二进制文件,并将其烧入flash中,为做下一步实验进行准备。
实验设备及工具●硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、用于ARM920T 的JTAG 仿真器、串口线。
●软件:PC 机操作系统Win2000 或WinXP、Linux 9 ,交叉编译环境,仿真器驱动程序、超级终端通讯程序,第一章实验板的基本了解1.1嵌入式开发平台本次实验的硬件平台是基于ARM体系结构,由北京博创兴业科技有限公司开发的UP-NetARM2410-S实验仪器。
UP-NetARM2410-S的CPU为ARM920T 内核的三星S3c2410芯片,有MMU可以运行标准的ARM-LINUX内核。
该硬件平台的基本架构如图1.1所示;在图1.1中,2410核心板的结构为:●CPU: ARM920T结构芯片:工作频率202MHz ,SAMSUNG公司的S3c2410X ●FLASH:64M NAND型,SAMSUNG的K9F1208●RAM:64MB SDRAM,HY57V561620AT-H●200管脚精密插座S3c2410X芯片集成了大量的功能单元,包括:1).内部1.8V,存储器3.3V,外部IO3.3V,16KB数据CACHE,16KB指令CACHE,MMU;2).内置外部存储器控制器(SDRAM 控制和芯片选择逻辑);3). LCD控制器(最高4K色 STN和256K彩色TFT),一个LCD专用DMA;4). 4路带外部请求线的DMA;5).三个通用异步串行端口(IrDA1.0, 16-Byte Tx FIFO, and 16-Byte Rx FIFO),2通道SPI;6).一个多主IIC总线,一个IIS总线控制器;7). SD主接口版本1.0和多媒体卡协议版本2.11兼容;8). 2个USB HOST ,一个USB DEVICE(VER1.1);9). 4个PWM定时器和一个内部定时器;10).看门狗定时器;11).117个通用IO;12).24个外部中断;13).电源控制模式:标准、慢速、休眠、掉电;14).8通道10位ADC和触摸屏接口;15).带日历功能的实时时钟;16).芯片内置PLL;图1.1 UP-NetARM2410-S的架构示意图17).设计用于手持设备和通用嵌入式系统;18).16/32位RISC体系结构,使用ARM920T CPU核的强大指令集;19).ARM带MMU的先进的体系结构支持WINCE、EPOC32、LINUX;20).指令缓存(cache)、数据缓存、写缓冲和物理地址TAG RAM,减小了对主存储器带宽和性能的影响;21).ARM920T CPU 核支持 ARM 调试的体系结构;22).内部先进的位控制器总线(AMBA2.0, AHB/APB) .图1.2 S3c2410X芯片1.2嵌入式Linux 开发流程嵌入式Linux 开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过以下过程:1.建立开发环境操作系统一般使用REDHAT-LINUX,版本7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的GCC 交叉编译器进行安装(比如arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。
1/6/stm32-ucgui.html About Links Invite RssHome / Archive Trip Share E-Factory Findpark Quickweibo Mr.YongLan here is siri ..五十将相寻死路,生不认魂,死不认尸。
UCGUI是一种嵌入式应用中的图形支持系统。
它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。
它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。
UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。
类似程序还有国产的一个MINIGUI (/zhcn/),MiniGUI 是一个自由软件项目。
其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Linux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucle us 等)的实时嵌入式操作系统。
有机会尝试下,支持下国产,毕竟国内这样的公司不多。
这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。
但是目前来说只有这个版本的代码是最全的,包括了J PEG , MULTILAYER , MEMDEV ,AntiAlias等模块。
一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。
UCGUI390a 下载整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。
总之移植是个累人的活首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 TFT LCD stm32 驱动 触摸屏 两篇文章UCGUI的文件数量很大,主要用到UCGUI390a/Start/Config 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。
嵌入式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层默认处理两种设备的输入操作:键盘设备和鼠标设备。