嵌入式LINUX系统中的GUI系统的研究与移植
- 格式:doc
- 大小:10.41 KB
- 文档页数:4
基于ARM LINUX的嵌入式GUI的研究和移植纪竞舟,付宇卓(上海交通大学芯片与系统研究中心,上海200030)表1上述三个GUI的比较MiniGUI Microwindows QT/EmbeddedAPI Win32风格X、Win32子集QT(C+ +)函数库大小500K 600K 1.5M可移植性好很好较好(但函数库本身的交叉编译较难)多语种支持很好好使用UNICODE,但效率较低,对中文字体支持几乎没有系统资源消耗小较小最大(C+ +实现)操作系统支持Linux Linux、ELKS、MSDOS Linux硬件平台支持X86、ARM、MIPS、PowerPC X86、ARM、MIPS、PowerPC、SPARC X86、ARM 3基于ARM Linux平台的移植3.1编译环境的建立GUI的编译通常都是在PC机上执行的,也就是说,编译器本身能够在PC机上执行,同时编译源代码生成的二进制文件必须能在目标机上执行,这类编译器通常称为交叉编译器。
对于ARM平台,我们安装了cross-arm-binutils- *.i386.rpm、cross-arm-gcc- *.i386.rpm、cross-arm-glibc-*.i386.rpm这三个包。
这些包都可以从网上免费获取,“*”通常代表版本号。
arm-binutils这个包一般包含了一些针对ARM平台的二进制工具,比如arm-strip、arm-ar等命令;arm-glibc这个包包含的是标准C的函数库的ARM的版本以及对应的头文件;arm-gcc中包含的则是生成ARM平台代码的x86上的交叉编译器。
执行rpm命令将这些包安装到PC机上,若不在系统默认搜索目录下,比如安装在/opt/cross目录下,则必须将/opt/cross/bin目录加到系统的PATH环境变量中,这样在每次编译时系统才能找得到编译器。
另外需要注意的是,编译时所用的函数库版本要与目标版上运行时所用的函数库版本一致。
嵌入式Linux系统中的GUI系统的研究与移植介绍引言嵌入式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。
其中使用NanoX 接口的API与X接口兼容,但是该接口没有供应窗口管理,如窗口移动和窗口剪切等高级功能,系统中需要首先启动nanoX的Server程序nanoxserver和窗口管理程序nanowm。
基于Linux的嵌入式GUI设计研究摘要:本文介绍了嵌入式图形用户界面(Embedded Graphics User Interface,Embedded GUI)的结构和设计思想,详细说明了嵌入式GUI的三层结构:GAL和IAL层、GUI核心层、GUI的API层和GUI整体执行流程。
关键词:嵌入式GUI;GAL;IAL;API;C/S结构1引言嵌入式GUI作为嵌入式系统中三大关键技术之一,在嵌入式领域的应用越来越广泛,嵌入式系统对GUI的要求也越来越高,可靠性高、实时性强、占用资源小、移植性强、可裁减、软件开发简单等都成为人们对GUI的一致要求。
目前比较流行的嵌入式GUI有QT/Embedded、Microwindows、MiniGUI等。
它们有各自的优缺点,但设计思想有很多相似之处。
嵌入式GUI一般都采用分层结构设计,可分为三层。
如下图1所示:在系统硬件之上的是图形抽象层(GAL)和输入抽象层(IAL),这部分是和系统的硬件驱动程序紧密相关的;中间核心层是GUI最重要的部分,一般采用客户机/服务器(C/S)模式运行,配合相应的功能模块,比如窗口管理模块、时钟管理模块等来完成所需的服务器功能;最上的API 层是GUI提供给用户的编程接口。
图1.嵌入式GUI三层结构2 GAL和IAL层一般的GUI系统都应该分离出GAL和IAL层,它们可以将底层图形设备和上层接口分离开来,大大提高了GUI的可移植性,移植过程只需通过抽象层接口实现新的图形引擎即可。
2.1 GAL层在图形抽象层(GAL)主要实现图形引擎。
图形引擎需要根据操作系统的要求定义其相关信息以便注册到系统中,实现GAL 定义的各个接口,包括初始化和终止、图形上下文管理、画线、色彩模式设置等,这个和图形显示设备(如VGA卡)直接相关,复杂的图形显示设备需要通过设备的驱动程序完成对显示设备的具体操作,是和硬件密切相关的部分之一。
在嵌入式系统中,实现图形引擎一般只需对处理器相应的显存区进行写操作,由于不同液晶屏的色彩模式相差很大,所以对不同的色彩模式,GUI所使用的图形引擎一般不一样,至于具体使用哪个图形引擎需要在系统中进行配置。
嵌入式Linux课程设计课题:嵌入式Linux下的图形化窗口QT的移植与研究姓名:专业班级:学号:指导老师:一.前言随着嵌入式的技术的飞速发展,嵌入式已经得到了越来越广泛的应用。
应用领域涉及无线、网络、消费娱乐、影像、汽车电子、安全应用及存储装置。
如今越来越多的嵌入式需要一个图形用户界面(GUI),它是计算机与其使用者之间的对话接口,是嵌入式的重要组成部分。
本文重要针对嵌入式开发平台中Qt移植的过程进行详细的分析和研究,并且通过一个控制嵌入式开发平台的led数码灯的Qt应用程序实例来说明移植和实现的过程。
1.系统平台组成根据设计需要,本文目的是实现一个具有图形接口界面的嵌入式显示终端,改系统使用嵌入式设计技术。
硬件上,采用基于Samsung$3C2410[1]CpU的目标板;在软件上,选择嵌入式Linux为操作系统。
整个系统软件由引导程序(ViVi公司的boot loader)、设备驱动(包括帧缓存frame buffer)、嵌入式Linux内核、文件系统(cramfs)、基j:QT/Embedded L21和Qtopia的用户图形界面以及应用程序组成.2. Qt的移植2.1开发环境的建立本文采用的开发环境是Pc机+CygWin+arm-Linux-Qt。
2.1.1 Cygwin的建立从网站http://WWw.cygwin.com上下载并安装最新版本Cygwin,本文采用的是Cygwinl.5.1的版本。
需要注意的是,Cygwin的安装目录必须位于硬盘的NTFS 分区,否则会影响文件的属性和权限操作。
本文安装Cygwin的路径为F:\cygwin。
2.1.2编译器安装下载arm-linux-gcc-3.4.1.tar.bz2至1]/usr/local下,生成的编译工具会在目录/usr/10cal/arm/3.4.i/bin下,然后修改/etc/profile文件,重新启动Cygwin就可以直接运行arm—l inux~gcc。
主流嵌入式Linux系统下GUI解决方案在嵌入式系统领域,有不少GUI系统,如QNX Photon MicroGUI等,可是具体到嵌入式Linux领域又有哪些可供选择的GUI系统呢?在嵌入式环境底下,GUI系统的整体构架跟PC Desktop相去不远,例如绘图函数库、字型、事件处理等也都是嵌入式GUI系统所要面临的。
但是嵌入式系统本身由于体积小、资源少的特点,所以在整体设计上必须较为严谨,必须考虑的条件更多,有时很像又回到了Dos下编制程序的年代,对于软件所占的存储量有时可以说是锱铢必较。
Unix环境下的图形视窗标准为X Window System(以下简称X标准),Linux 是类 Unix系统,所以顶层运行的GUI系统是兼容X标准的XFree86系统。
X标准大致可以划分X Server、Graphic Library(底层绘图函数库)、Toolkits、Window Manager、Internationalization(I18N)等几大部分(详细内容见链接)。
笔者认为,虽然X架构不错,但却不怎么适用于嵌入式环境,因为实际工作起来实在太过于庞大,因此许多嵌入式Linux GUI系统会把上述几点合并,甚至全部绑到一起,当然这样同时也会失去很多弹性与扩展功能,但为了适应于嵌入式系统,这也是一个解决问题的方法。
本文下面就介绍一下现存的主流嵌入式 Linux 下GUI解决方案。
主流解决方案介绍Qt/EmbeddedQt是Trolltech这家商业公司所开发的一个跨平台FrameWork环境,在X环境下可以看作是一套功能完整的用户界面工具包,它采用类似C+ +的语法,并且具备物件导向功能。
跨平台的特性可以让使用Qt编写的软件,在Microsoft Windows 95/98/2000、 Microsoft Windows NT、MacOS X、Linux、Solaris、HP-UX、Tru64 (Digital UNIX)、 Irix、FreeBSD、BSD/OS、SCO、AIX等许多平台上执行。
Qt/E 的嵌入式Linux GUI 研究与实现摘要:嵌入式GUI(Graphical User Interface 〉为嵌入式系统提供了一种应用于特殊场合的人机交互接口(Man-MachineInterface 〉。
由于嵌入式系统本身的硬件资源有限,要求嵌入式不同的硬件条件和使用需求。
本文首先介绍了嵌入式LinuxGUI 目前的发展状况及各自的特点,然后针对目前主流的嵌入式 Qt/Embedded ,阐述其图形引擎的实现。
最后,结合三星公司 具体平台上的实现和应用。
关键字:ARM9 Linux 交叉编译 嵌入式 GUI Qt Qt/Embedded Qtopia FrameBuffer Signals/SlotsResearch and Realization of Embedded Linux GUI based on Qt/EmbeddedTang Wei, Li Qiang(College of Computer Science, HangZhouDianZiUniversity, Hang Zhou, 310018, China>Abstract: The Embedded GUI(Graphical User Interface>provides a Man-Machine Interface used in special occasions for Embedded Systems. Since the embedded system itself limited hardware resources, whose requirements of embedded GUI is highly portable and can be cut of, so as to adapt to the conditions and use different hardware requirements. This article firstly introduces the current development of embedded Linux GUI and their own characteristics, and then for the current mainstream embedded GUI system--Qt/Embedded,described the realization of its graphics engine. What ' more, it Combined with Samsung S3C2410 development board, introduced the achieving and application on a specific platform for embedded GUI system .Keywords: ARM9 Linux Cross-Compiling Embedded GUI Qt Qt/Embedded Qtopia FrameBuffer Signal/Slots1引言由于嵌入式系统的特殊性,它一般不会建立在庞大的操作系统以及GUI 之上,女口 Windows 或XWindows,它对实时性的要求非常高,对GUI 的要求更高。
嵌入式Linux系统中的GUI系统的研究与移植22是由国内自由软件开发人员设计开发的,目标是为基于的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。
的体系架构如图3所示。
分为最底层的层和层,向上为基于标准接口中库的-架构和基于的-架构。
其中前者受限于模式对于整个系统的可靠性影响——进程中某个的意外错误可能导致整个进程的崩溃,该架构应用于系统功能较为单一的场合。
-应用于多进程的应用场合,采用多进程运行方式设计的架构能够较好地解决各个进程之间的窗口管理、序剪切等问题。
还有一种从-衍生出的运行模式。
与架构不同的是,模式一次只能以窗口最大化的方式显示一个窗口。
这在显示屏尺寸较小的应用场合具有一定的应用意义。
的层技术、、基于的图形引擎以及哑图形引擎等,对于公司的在下也有较好的支持。
层则支持标准控制台下的鼠标服务、触摸屏、标准键盘等。
下丰富的控件资源也是的特点之一。
当前的最新版本是133。
该版本的控件中已经添加了窗口皮肤、工具条等桌面中的高级控件支持。
2.3是著名的库开发商公司开发的面向嵌入式系统的版本。
因为是等项目使用的支持库,许多基于的程序因此可以非常方便地移植到上。
同样是结构。
延续了在上的强大功能,在底层摒弃了,仅采用作为底层图形接口。
同时,将外部输入设备抽象为和输入事件,底层接口支持键盘、鼠标、触摸屏以及用户自定义的设备等。
类库完全采用++封装。
丰富的控件资源和较好的可移植性是最为优秀的一方面。
它的类库接口完全兼容于同版本的-11,使用下的开发工具可以直接开发基于的应用程序界面。
与前两种系统不同的是,的底层图形引擎只能采用。
这就注定了它是针对高端嵌入式图形领域的应用而设计的。
由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱,各种补丁较多的问题。
的结构也过于复杂臃肿,很难进行底层的扩充、定制和移植,尤其是用来实现机制的文件。
当前的最新版本为332,能够支持的手持应用套件的最高版本为238。
嵌入式Linux环境下MiniGUI的研究与移植前言近年来随着嵌入式设备与市场需求的广泛结合,手机、PDA、DVD 播放机等产品的应用对可视化操作界面的简洁和方便提出了更高的要求,这都需要一个稳定可靠的高性能GUI 系统来提供支持。
图形用户界面(Graphic User Interface,简称GUI)的广泛流行是当今计算机技术的重要成就之一,它极大地方便了非专业用户的使用,人们可以通过窗口、菜单方便地进行操作。
由于嵌入式系统实时性要求高,同时嵌入式系统硬件配置又有限,所以对轻型GUI 的需求更加突出。
另外,嵌入式系统往往是一种订制设备,它们对GUI 的需求也各不相同,因此GUI 也必须是可订制的。
综上所述,嵌入式系统对GUI 的基本要求应包括轻型、占用资源少、高性能、高可靠性以及可配置。
MiniGUI 是目前比较常用的几种GUI 系统之一,与其他的GUI 相比,MiniGUI 最显著的特点就是轻型、占用资源少,而且在这几年的发展里,MiniGUI 已经非常成熟和稳定了,在许多产品和项目中都已得到了实际应用。
1 MiniGUI 的特点和体系结构1. 1 MiniGUI 的特点MiniGUI 是由原清华大学教师魏永明主持开发的轻量级图形系统,是一种面向嵌入式或实时系统的图形用户界面支持系统。
它遵循GPL 公约,是基于SVGALib 及LinuxThread 库的多窗口GUI 支持系统。
能跨多种操作系统,主要运行于linux 及一切具有POSIX 线程支持的POSIX 兼容系统,包括普通嵌入式Linux、eCos、uC/OS-II、VxWorks 等系统,是国内最早的自由软件之一。
MiniGUI 的主要特点有:(1) 遵循GPL 条款的纯自由软件;(2) 提供了完备的多窗口机制;。
嵌入式Linux的MiniGUI研究和移植摘要:分析嵌入式操作系统下典型的图形用户界面MiniGUI的结构和特点,并提出将其移植到SUNPLUS的DVD720上的方案。
关键词:图形用户界面(GUI) 嵌入式系统Frame Buffer引言1 嵌入式Linux下的GUI概况1.1 GUI在嵌入式系统中的地位随着嵌入式系统的广泛应用,PDA、机顶盒、DVD/VCD播放机及WAP手机已经迅速普及。
图形用户界面(GUI)的广泛流行,是当今计算机技术的重大成就之一。
它极大地方便了非专业用户的使用,因此实时嵌入式系统对GUI的需求越来越明显,而这一切均要求有一个高性能、高可靠的GUI 的支持。
由于嵌入式系统实时性要求非常高,对GUI的要求也更高。
这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI之上,比如Windows或X Window,太过庞大和臃肿。
这样,这些系统对轻型GUI的需求更加突出。
另外嵌入式系统往往是一种定制设备,它们对GUI的需求也各不相同。
有些系统只要求一些图形功能,而有些系统要求完备的GUI支持,因此,GUI也必须是可定制的。
嵌入式系统对GUI的基本要求包括轻型、占用资源少、高性能、高可靠性及可配置[1]。
1.2 目前嵌入式系统中GUI的实现尽管实时嵌入式系统对GUI的需求越来越明显,但目前GUI的实现方法各有不同[1]:①某些大型厂商有能力自己开发满足自身需要的GUI系统。
②某些厂商没有将GUI作为一个软件层从应用程序中剥离,GUI的支持逻辑由应用程序自己来负责。
③采用某些比较成熟的GUI系统,比如Mini GUI、MicroWindows 或者其它GUI系统。
比较常用的有如下几种GUI系统:紧缩的X Window 系统、MiniGUI、MicroWindows、OpenGUI及QT/Embedded 等。
下面简单介绍这些系统。
(1)MiniGUIMiniGUI[2]由原清华大学教师魏永明先生开发,是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。
嵌入式Linux系统中的GUI系统的研究与移植来源:单片机及嵌入式系统应用作者:北京航空航天大学徐广毅张晓林崔迎炜杨欣昕吴小伟摘要:针对嵌入式Linux系统中几种常见的GUI(Graphic User Interface)系统,讨论嵌入式GUI实现的底层技术方式;详细分析Microwindows、MiniGUI、Qt/Embedded等三种GUI的实现特点、体系结构、API接口。
结合这三种嵌入式GUI在以Motorola i,MX1为核心的实际应用系统中移植开发的问题,讨论移植技术与中文化技术。
关键词:嵌入式Linux GUI 应用与移植中文化引言嵌入式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,可直接运行。
[!--empirenews.page--]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.3QT/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界面。
[!--empirenews.page--]与前两种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 Li[1][2][3]下一页nux作为操作系统。
以下分别讨论这三种嵌入式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较少支持控制台字符模式,需要修改M icrowindows中对framebuffer的操作部分以关闭显示模式的转换。
在应用程序开发移植中需要注意的是:使用ECMAAPIW接口设计的程序无需nano-X的Server程序和nanowm,如图2所示。
系统中可以直接启动使用该接口编写的用户程序;但需要注意的是,一个系统中如同时存在使用两种不同的API接口编写的进程,会造成nano-X的Server与ECMA APIW的进程对系统硬件资源的使用竞争,双方的程序将无法正常显示或响应应用户输入。
[!--empirenews.page--]在为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的图形发生引擎。