ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:55.50KB ,
资源ID:1624340      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-1624340.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式Linux系统中的GUI系统的研究与移植.doc)为本站会员(kuailexingkong)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

嵌入式Linux系统中的GUI系统的研究与移植.doc

1、嵌入式 Linux 系统中的 GUI 系统的研究与移植姓名:关键词:关键词:嵌入式 Linux GUI 应用与移植 中文化【摘要】针对嵌入式 Linux 系统中几种常见的 GUI(Graphic User Interface)系统,讨论嵌入式 GUI 实现的底层技术方式;详细分析Microwindows、MiniGUI、Qt/Embedded 等三种 GUI 的实现特点、体系结构、API 接口。结合这三种嵌入式 GUI 在以 Motorola i,MX1 为核心的实际应用系统中移植开发的问题,讨论移植技术与中文化技术。引言探讨了基于嵌入式 GIS 的城市规划红线管理信息系统(eURLIS)总体

2、结构模型。在 PDA 上设计实现了系统红线的查询、生成、量算、统计、指标分析和草图绘制等功能模块。介绍了系统开发平台与技术路线。给出了红线管理决策支持解决方案、各类红线辅助生成算法和嵌入式 MapXActiveX 与 S309PictureBOXActiveX 集成等关键技术。 城市规划是城市发展的龙头,而在城市规划中,规划红线至关重要,因为城市的规划红线是城市规划目的在有限的城市地域空间上的具体落实,由于城市空间的有限性、差异性等,城市复杂的自然、经济和人口等诸多因素随着城市化发展相互影响制约,直接影响到城市的可持续发展。规划红线成为城市管理部门依法行政管理的法津依据。 规划红线是按城市规划

3、的要求,以图形、文字、数据红线点坐标、距离、方位等表示规划项目的地理位置和规划区域。它是实施城市空间准入和空间管制的依据,具有法律效力,长期以来传统的规划红线资料均以图纸的形式保存,有许多缺点。随着信息时代的来临,城市正在铺设信息高速公路、构筑数字城市。传统的规划红线管理已不能满足现代化城市规划建设需要,城市规划红线管理与决策支持已成为新的课题。探索全新的信息化管理模式势在必行。嵌入式 GUI 为嵌入式系统提供了一种应用于特殊场合的人们交互接口。嵌入式 GUI 要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。另外,由于嵌入式系统硬件本身的特殊性,嵌入式 GUI 应具备

4、高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。总体来讲,嵌入式 GUI 具备以下特点:*体积小;*运行时耗用系统资源小;*上层接口与硬件无关,高度可移植;*高可靠性;*在某些应用场合应具备实时性。1 基于嵌入式 Linux 的 GUI 系统底层实现基础一个能够移植到多种硬件平台上的嵌入式 GUI 系统,应用至少抽象出两类设备:基于图形显示设备(如 VGA 卡)的图形抽象层GAL(Graphic Abstract Layer),基于输入设备(如键盘,触摸层等)的输入抽象层 IAL(Input Abstract Layer)。GAL 层完成系统对具体的显示硬件设备的操作,极大程度上隐蔽各

5、种不同硬件的技术实现细节,为诮程序开发人员提供统一的图形编程接口。IAL 层则需要实现对于各类不同输入设备的控制操作,提供统一的调用接口。GAL 层与 IAL 层的设计概念,可以极大程序地提高嵌入式 GUI的可移植性。目前应用于嵌入式 Linux 系统中比较成熟,功能也比较强大的GUI 系统底层支持库有 SVGA lib、LibGGI、Xwindow、framebuffer等。2 三种嵌入式 GUI 系统的分析与比较21 MicrowindowsMicrowindows 是一个典型的基于 Server/Clinent 体系结构的 GUI 系统,基本分为三层。最底层是面向图形显示和键盘、鼠标或触

6、摸屏的驱动程序;中间层提供底层硬件的抽象接口,并进行窗口管理;最高层分别提供兼容于 X Window 和 ECMA APIW(Win32 子集)的 API。其中使用Nano-X 接口的 API 与 X 接口兼容,但是该接口没有提供窗口管理,如窗口移动和窗口剪切等高级功能,系统中需要首先启动 nano-X的 Server 程序 nanoxserver 和窗口管理程序 nanowm。用户程序连接 nano-X 的 Server 获得自身的窗口绘制操作。使用 ECMA APIW 编写的应用程序无需 nanox-server 和 nanowm,可直接运行。Microwindows 提供了相对完善的图形

7、功能和一些高级的特性,如 Alpha 混合、三维支持和 TrueType 字体支持等。该系统为了提高运行速度,也改进了基于 Socket 套接字的 X 实现模式,采用了基于消息机制的 Server/Client 传输机制。Microwindows 也有一些通用的窗口控件,但其图形引擎存在许多问题,可以归纳如下:*无任何硬件加速能力;*图形引擎中存在许多低效算法,如在圆弧图函数的逐点判断剪切的问题。由于该项目缺乏一个强有力的核心代码维护人员,2003 年Microwindows 推出版本 0.90 后,该项目的发展开始陷于停滞状态。2.2 MiniGUIMiniGUI 是由国内自由软件开发人员设

8、计开发的,目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。MiniGUI 的体系架构。MiniGUI 分为最底层的 GAL 层和 IAL 层,向上为基于标准POSIX 接口中 pthread 库的 Mini-thread 架构和基于 Server/Client的 Mini-Lite 架构。其中前者受限于 thread 模式对于整个系统的可靠性影响进程中某个 thread 的意外错误可能导致整个进程的崩溃,该架构应用于系统功能较为单一的场合。Mini-Lite 应用于多进程的应用场合,采用多进程运行方式设计的 Server/Client 架构能够较好地解决各个进程

9、之间的窗口管理、Z 序剪切等问题。MiniGUI 还有一种从 Mini-Lite 衍生出的 standalone 运行模式。与Lite 架构不同的是,standalone 模式一次只能以窗口最大化的方式显示一个窗口。这在显示屏尺寸较小的应用场合具有一定的应用意义。MiniGUI 的 GAL 层技术 SVGA lib、LibGGI、基于 framebuffer的 native 图形引擎以及哑图形引擎等,对于 Trolltech 公司的QVFB 在 X Window 下也有较好的支持。IAL 层则支持 Linux 标准控制台下的 GPM 鼠标服务、触摸屏、标准键盘等。MiniGUI 下丰富的控件资

10、源也是 MiniGUI 的特点之一。当前MiniGUI 的最新版本是 1.3.3。该版本的控件中已经添加了窗口皮肤、工具条等桌面 GUI 中的高级控件支持。23 QT/EmbeddedQt/Embedded 是著名的 Qt 库开发商 Trolltech 公司开发的面向嵌入式系统的 Qt 版本。因为 Qt 是 KDE 等项目使用的 GUI 支持库,许多基于 Qt 的 X Window 程序因此可以非常方便地移植到Qt/Embedded 上。Qt/Embedded 同样是 Server/Client 结构。Qt/Embedded 延续了 Qt 在 X 上的强大功能,在底层摒弃了 X lib,仅采用

11、 framebuffer 作为底层图形接口。同时,将外部输入设备抽象为 keyboard 和 mouse 输入事件,底层接口支持键盘、GPM 鼠标、触摸屏以及用户自定义的设备等。Qt/Embedded 类库完全采用 C+封装。丰富的控件资源和较好的可移植性是 Qt/Embedded 最为优秀的一方面。它的类库接口完全兼容于同版本的 Qt-X11,使用 X 下的开发工具可以直接开发基于Qt/Embedded 的应用程序 QUI 界面。与前两种 GUI 系统不同的是,Qt/Embedded 的底层图形引擎只能采用 framebuffer。这就注定了它是针对高端嵌入式图形领域的应用而设计的。由于该库

12、的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱,各种补丁较多的问题。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 的研究和移植

13、过程中,硬件平台采用自行设计的以 Motorola MC9328 MX1 为核心的开发系统。该系统采用 CPU 内部 LCD 控制器和 320240 分辨率的 16bpp TFT LCD 作为显示设备,使用 I2C 总线扩展出 16 按键的键盘,同时配置了 9 位A/D 量化精度的电阻触摸屏作为鼠标类输入设备;同时移植了 ARM Linux 作为操作系统。以下分别讨论这三种嵌入式 GUI 的底层移植和中文化技术。移植以上三种嵌入式 GUI 系统,需要首先实现 Linux 内核中的framebuffer 驱动。对应于开发系统为 MC9328 中的 LCD 控制器,该部分驱动程序必须以静态方式编译

14、进内核,在系统启动时由传递进内核的启动参数激活该设备。I2C 键盘的驱动程序和触摸屏的驱动程序实现后,作为 Linux 内核模块在使用时动态加载。31 Microwindows 的移植Microwindows 驱动层相应的源码目录为 src/drivers/。其中以scr*开头的源码是针对显示设备的驱动接口,以 mou*开头的源码文件为鼠标设备(包括触摸屏)的驱动接口,以 kbd*开头的源码文件针对键盘设备的驱动接口。移植过程中需要实现自己的设备驱动接口提供给 Microwindows 使用,就必须按照指定的接口格式编写相应的 scr、mou、kbd 的底层支持。这种方式实现简单,条理也很清晰

15、。显示设备驱动接口:Microwindows 的图形发生引擎支持framebuffer,修改 src/中的 config 文件指定使用 framebuffer 作为底层图形支持引擎;但需要注意嵌入式 Linux 的 framebuffer 较少支持控制台字符模式,需要修改 Microwindows 中对 framebuffer的操作部分以关闭显示模式的转换。在应用程序开发移植中需要注意的是:使用 ECMAAPIW 接口设计的程序无需 nano-X 的 Server 程序和 nanowm,如图 2 所示。系统中可以直接启动使用该接口编写的用户程序;但需要注意的是,一个系统中如同时存在使用两种不同

16、的 API 接口编写的进程,会造成nano-X 的 Server 与 ECMA APIW 的进程对系统硬件资源的使用竞争,双方的程序将无法正常显示或响应应用户输入。在为 Microwindows 增加中文显示的支持时,主要工作包括两个部分。一部分是系统字体的中文支持。此处使用等宽光栅字体,主要负责窗口标题和内置控件的中文绘制,将字体编译进Microwindows 内核中,光栅信息作为一维数组,显示时按照字符偏移量从该数组中调出相应的光栅信息显示即可。除此之外,当程序调用 CreateFont 时,需要在内部实现为打开文件系统中的字体文件。通过修改 src/engine/devfont.c 中的

17、 GdCreateFont 部分,添加相应的 hzk(汉字库)支持,便可以实现在 CreateFont 时创建出一个支持 GB2312 字符集的逻辑字体,并使用外部字体进行显示。在应用程序设计时,如果没有调用 SelectObjectu 将外部字体选入,中文显示时将默认使用系统字体。3.2 C/GUI 与操作系统的接口相关部分的修改C/GUI 在与 C/OS-II 结合应用时通常被分为几个小的显示任务,由于每个显示任务都共用一个 GUI_Context 上下文变量,在操作系统进行任务切换时一个 GUI 任务对上下文的操作可能被另外一个 GUI 任务打断,此时新的 GUI 任务对上下文的操作是在

18、被中断任务的上下文基础上进行的,这样前一个任务的信息会被后一个任务所使用,有些基本信息作为公用信息需要被共用,而有些信息在处理过程中是不能被打断的。这就存在资源互斥的问题。C/GUI 在设计时是通过上锁和解锁来解决此问题。其过程是通过在关键区域入口设置 GUI_X_Lock()以获得专一访问权,用完后在出口处设置 GUI_X_ Unlock()让出资源,达到多个 GUI 任务对同一数据在关键区域内访问的互斥。在 C/GUI 移植到 C/OS-II 的过程中,则需要利用操作系统实现资源互斥的系统调用对上述宏进行替换,这涉及到 3 个任务调度函数的重新定义:void GUI_X_InitOS (v

19、oid); /*任务初始化*/ void GUI_X_Lock (void); /*任务锁定*/ void GUI_X_Unlock (void); /*任务解锁*/ 此外 C/GUI 还用到 C/OS-II 中的延时调用,通过在GUI_X_Delay()中调用 C/OS-II 的 OSTimeDly()实现延时和任务切换。这涉及到 2 个系统时间接口函数的定义:int GUI_X_GetTime (void); /*取系统时间*/void GUI_X_Delay (int ms); /*延时函数*/本文以 LCD 驱动接口模块设计为例介绍在 C/GUI 移植过程中LCD 驱动程序的编写,以最

20、终实现图形显示。驱动程序主要是 LCD 初始化,这个函数完成对 44B0X LCD 控制器的配置、显存的映射等。这里还是以 320240 彩色 LCD 为例介绍一下初始化程序的编写。具体如下:void LCD_Init(void) int i; LCD_DisplayOpen(FALSE); /* 关 LCD 显示 */ for(i=0; i22)1); rLCDSADDR2=M5D(U32)pLCDBuffer256+(LCDWIDTH*LCDHEIGHT)1) | (MVAL21); rLCDSADDR3= PAGEWIDTH | (OFFSIZE9); rREDLUT = 0xfdb97

21、531; /* 设置红绿蓝三色的颜色值*/rGREENLUT = 0xfdb97531; rBLUELUT = 0xfb73; rDITHMODE = 0x0; rDP1_2 = 0xa5a5; rDP4_7 = 0xba5da65; rDP3_5 = 0xa5a5f; rDP2_3 = 0xd6b; rDP5_7 = 0xeb7b5ed; rDP3_4 = 0x7dbe; rDP4_5 = 0x7ebdf; rDP6_7 = 0x7fdfbfe; /* enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=10*/ rLCDCON1 =(1)|(DI

22、SMODE5)|(WDLY8)|(WLH10)|(CLKVAL12); Delay(5000); LCD_BkLight(TRUE); /* 开背光 */ LCD_DisplayOpen(TRUE); /* 打开 LCD 显示 */ 完成如上 LCD 驱动以后, 再设置相应的中断服务子程序(IS), C/GU I 就可以稳定地运行在 C/OS-II 和目标平台之上了。主要是 LCDConf.h 配置文件的修改,如果 LCD 选用 320240 彩色,就要作如下修改 LCDConf.h 的内容: /*LCDConf.h*/ #ifndef LCDCONF_H #define LCDCONF_H

23、#define LCD_XSIZE (320) /* LCD 水平分辨率 */ #define LCD_YSIZE (240) /* LCD 竖直分辨率 */ #define LCD_BITSPERPIXEL (8) #endif 另外,还涉及到 LCD 寄存器常量的设置等这里不一一详述。到这里 c/GUI 的移植基本完成。本文只介绍了 c/GUI 结合 LCD在基于 S3C44B0X 的 C/OS-II 上的移植。如果涉及到输入设备键盘、鼠标以及触摸屏的移植还要编写相应的驱动程序和其相关参数的修改。3.3 MiniGUI由于 MiniGUI 较好地将硬件设备抽象为 GAL 层和 IAL 层,

24、移植时只需要针对自身的硬件特点按照 GAL 层调用接口和 IAL 层调用接口来做内部实现即可。图 4 为 MiniGUI 的 GAL 层结构示意,IAL 层结构类似。实现了 framebuffer 的 Linux 驱动后,配置 MiniGUI 选择Native 的 GAL 引擎,便可以使用 framebuffer 作为 MiniGUI 的图形发生引擎。MiniGUI 的 IAL 层将输入设备的输入事件最终映射为 GUI 系统API 层的消息事件。IAL 层默认处理两种设备的输入操作:键盘设备和鼠标设备。键盘设备向上层提供不同的按键输入信息,鼠标设备提供点击、抬起和落笔坐标等的信息。在实现 Mi

25、niGUI 与输入设备驱动的接口时,采用 Select 的方式获得输入设备的动作,并转换为消息队列中的消息。消息参数按照 Win32 接口定义为点击键编号或鼠标当前的坐标(其中触摸屏事件与鼠标事件类似)。通过编写针对硬件开发系统的 IAL 支持代码,实现了 IAL 层的移植。MiniGUI 中多字体和字符集支持是通过设备上下文(DC)的逻辑字体(LOGFONT)实现的,创建逻辑字体时指定相应的字符集,其内部实现为对于所需显示字符的所属字符集的识别处理,最终调用相应字符集的处理函数族。应用程序在启动时,可切换系统字符集,如 GB2312、BIG5、EUCKR、UJIS。MiniGUI 的这种字符

26、集支持方式不同于采用 UNICODE 的解决方案。在节省系统资源的意义上讲,这种实现更加适合于嵌入式系统应用,是 MiniGUI 的一大创新点。MiniGUI 同时支持包括 ttf、bdf、type 1、vbf 等多种字体格式,可以根据需要配置 MiniGUI 来支持相应字体的显示。综述,尽管不同的实时嵌入式操作系统给用户提供的系统调用接口不尽相同,但是它们所准遵循的基本原理都是相同的。上述关于禁止任务抢占的普通实现以及嵌套计数实现提供的都是实现思想,在实际应用中很容易结合所使用的具体的操作系统写出PriorityProtect()和 UnPriorityProtect()的实现代码。本文详细

27、介绍了嵌入式图形用户界面在基于 C/OS-II 目标平台上的移植过程,实际表明在具有图形界面的嵌入式系统的开发中,采用基于 C/OS-II 的图形系统 c/GUI,移植简便、使用方便灵活,目前基于 C/OS-II 的 c/GUI 系统已成功移植到了系统效率测试仪上,系统的电能参数(电流、电压、功率)可以实时采集和实时波形显示;参数设置以菜单、编辑框的形式实现,界面的切换以窗口的形式实现。充分利用了 c/GUI 强大的图形功能,使人机界面更加丰富、友好。实践表明系统具有良好的实时性和稳定性。参考文献:1 Labrosse Jean J,uc/OS-II-源码公开的实时嵌入式操作系统,邵贝贝译,北京:中国电力出版社,2001.2 孔祥营等,嵌入式实时操作系统 VxWorks 及其开发环境Tornado,北京:中国电力出版社,2001.

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报