版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章
(第二部分)
图形用户接口——MiniGUI主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用MiniGUI简介
MiniGUI是一种在嵌入式系统中提供图形及图形用户界面支持的中间件技术,是面向嵌入式系统的轻量级图形用户界面支持系统,国内著名的自由软件项目之一。MiniGUI是一个自由软件项目。其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于Linux/uClinux、eCos以及其他传统RTOS(如VxWorks、ThreadX、uC/OS-II、Nucleus
等)的实时嵌入式操作系统。MiniGUI的演进1998年12月,飞漫软件创始人魏永明开始开发MiniGUI,并遵循GPL(GNUGeneralPublicLicense)发布MiniGUI。2002年9月,MiniGUI的核心开发者组件了北京飞漫软件技术有限公司(飞漫软件),并开始尝试MiniGUI的商业化经营。现在,飞漫软件仍然以自由软件项目形式维护和发展MiniGUI2008年10月,飞漫软件发布MiniGUI3.0版网址:应用领域电信(手机、多媒体设备、IPTV)工业仪表医疗仪器军工等。功能特性完备的多窗口机制和消息传递机制。常用的控件类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、进度条、属性页、工具栏、拖动条、树型控件、月历控件等。支持对话框和消息框以及其它GUI元素,包括菜单、加速键、插入符、定时器等。通过两种不同的内部软件结构支持低端显示设备(比如单色LCD)和高端显示设备(比如彩色显示器)。前者小巧灵活,而后者在前者的基础上提供了更加强大的图形功能。支持Windows的资源文件,如位图、图标、光标等。支持各种流行的图像文件,包括JPEG、GIF、PNG、TGA、BMP等等。支持多字符集和多字体。针对嵌入式系统,支持一般性的I/O操作和文件操作等。MiniGUI
的技术优势和其它针对嵌入式产品的图形系统相比,MiniGUI具有如下几大技术优势:1.占用资源少2.高性能、高可靠性3.可定制配置4.跨操作系统支持硬件支持理论上讲,MiniGUI的运行和具体的硬件平台无关;只要某个硬件平台上运行有MiniGUI
所支持的某个操作系统,MiniGUI就能在这个平台上运行。在业界使用的众多硬件平台中,其中已验证可运行MiniGUI
的硬件平台包括Intelx86、ARM、PowerPC、MIPS、DragonBall、ColdFire等。对系统资源的占用情况MiniGUI
本身的占用空间非常小,以嵌入式Linux操作系统为例,MiniGUI的典型存储空间占用情况如下:Linux内核:300KB~500KB(由系统需求决定);文件系统:500KB~2MB(由系统需求决定);MiniGUI
支持库:500KB~900KB(由编译选项确定);MiniGUI
字体、位图等资源:典型400KB(由应用程序需求确定,最低可在200KB以内);应用程序:100KB~2MB(由具体的应用需求确定)。总体的系统占有空间在2MB到4MB左右。在某些系统上,尤其是在传统嵌入式操作系统中,功能完备的MiniGUI
系统本身所占用的空间可进一步缩小到1MB以内。MiniGUI的软件架构MiniGUI
运行模式
MiniGUI-Threads。运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。主要用来支持大多数传统意义上的嵌入式操作系统,比如VxWorks、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。在Linux和uClinux上也能运行。MiniGUI-Processes。每个程序是单独的进程,每个进程也可以建立多个窗口,并且实现了多进程窗口系统。MiniGUI-Processes适合于具有完整UNIX特性的嵌入式操作系统,比如嵌入式Linux。该运行模式在MiniGUIV2.0.x中提供,在MiniGUIV3.0中得到进一步增强。
各操作系统上可运行的MiniGUI
运行模式
表4.1MiniGUI
在操作系统上的运行模式操作系统
MiniGUI版本
所支持的运行模式
LinuxMiniGUIV3.0.xMiniGUI-Processes
MiniGUI-Threads
MiniGUI-StandaloneLinuxMiniGUIV2.0.xMiniGUI-Processes
MiniGUI-Threads
MiniGUI-StandaloneuClinuxMiniGUIV1.6.xMiniGUI-Threads
MiniGUI-StandaloneVxWorks6.xMiniGUIV1.6.xMiniGUI-ThreadsThreadX
MiniGUIV1.6.xMiniGUI-ThreadsNucleusMiniGUIV1.6.xMiniGUI-ThreadsOSEMiniGUIV1.6.xMiniGUI-ThreadseCosMiniGUIV1.6.xMiniGUI-ThreadsuC/OS-IIMiniGUIV1.6.xMiniGUI-ThreadspSOSMiniGUIV1.6.x
MiniGUI-ThreadsMiniGUI-Threads运行模式的消息通讯机制MiniGUI
运行模式
MiniGUI-Standalone。MiniGUI可以以独立任务的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用uClinux的嵌入式产品中,因为各种原因而缺少线程支持,这时,就可以使用MiniGUI-Standalone来开发应用软件。总之:MiniGUI-Standalone模式的适应面最广,可以支持几乎所有的操作系统;MiniGUI-Threads模式的适用面次之;MiniGUI-Processes支持Linux。MiniGUI目前的开发方式基于MiniGUI
的开发可以在Linux或Windows操作系统下进行。由于MiniGUI
完全用C来编写,具有非常好的移植性,也使得MiniGUI
应用程序的交叉编译工作十分方便。为嵌入式设备编写的应用程序可以在任何安装在针对该设备的交叉编译工具链的平台上进行编译。最常见的方式是在Linux环境下安装gcc的交叉编译器,对应用程序进行编译。对于某些嵌入式系统(如VxWorks,uC/OS-II),则一般在Windows下安装相应的编译环境(如Tornado、ADS等),对应用程序进行编译。如果MiniGUI
应用程序在Linux环境下开发,它可以有两种运行方式。一种是直接在内核支持的FrameBuffer控制台下运行,一种则是在一个模拟FrameBuffer?
的X11应用程序(qvfb)下运行并完成调试。如果MiniGUI
应用程序在Windows下开发,则可以使用VisualStudio集成开发环境进行开发及编译,并在模拟FrameBuffer?
的Windows应用程序(wvfb)下运行应用程序并调试(如图5.1所示)。主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用6.2.1MiniGUI在Linux下的运行环境在运行Linux的PC机上,MiniGUI应用程序可以通过以下两种方式运行:在XWindow上,在虚拟FrameBuffer的QVFB中运行;在Linux的字符控制台上,在Linux内核提供的FrameBuffer驱动上运行。QVFBFrameBuffer设备驱动QVFB是Qt(Qt是Linux窗口管理器KDE使用的底层函数库)提供的一个虚拟的FrameBuffer工具。在XWindow环境下,进行基于QVFB之上的MiniGUI模拟开发、调试是常用的开发调试手段。对于大部分兼容VESA标准显卡的PC机,使用RedHat内核中包含的VESAFrameBuffer驱动程序就可以运行MINIGUI了。如果自己编译内核,则需要选中FrameBuffer的支持。
6.2.2安装资源文件在Linux环境下,把该文件复制到/opt/emulation目录下(emulation目录为创建的目录)。执行如下解压缩命令:[root@localhostemulation]#tarzxvfminigui-res-1.3.3.tar.gz该命令将建立minigui-res-1.3.3目录,然后进入该目录:[root@localhostemulation]#
cdminigui-res-1.3.3最后,通过makeinstall命令安装资源文件:[root@localhostminigui-res-1.3.3]#makeinstall这样,资源文件就安装到/usr/local/lib/minigui/res目录。
6.2.3配置安装MiniGUI库文件MiniGUI是以库的形式提供给用户的,通过将MiniGUI的库文件编译进应用程序来使用MiniGUI。步骤如下:1、下载压缩的库文件libminigui-1.3.3.tar.gz2、解压缩
tarzxvflibminigui-1.3.3.tar.gz
3、配置图形界面
makemenuconfig4、安装库文件makemakeinstall
主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用在QVFB上运行示例程序的步骤
mg-samples-1.3.1目录下包含了MiniGUI提供的多个示例程序,通过在mg-samples-1.3.1目录下依次执行./configure命令和make命令,可以将这些示例程序编译生成可执行程序。1.按照如下配置,修改/usr/local/etc目录下的配置文件MiniGUI.cfg。[system]gal_engine=fbcon改为gal_engine=qvfbial_engine=console改为ial_engine=qvfb[qvfb]defaultmode=320x240-8bpp
2.使用qvfb&命令启动已经安装的qvfb,并在File菜单下配置qvfb为320x240-8bpp模式。3.运行/opt/emulation/mg-samples/src/目录中的可执行程序。在QVFB上运行自己编写的应用程序的步骤
假设文件名为demo.c,需要的步骤如下:1.进入mg-samples-1.3.1目录,执行./configure;
2.把文件demo.c复制到/opt/emulation/mg-samples-1.3.1/src目录下;3.打开该目录下的文件Makefile.am:在COMMON_PROGS=的内容末尾填加可执行文件名demo。然后,在noinst_PROGRAMS=$(COMMON_PROGS)$(LITE_PROGS)下填加demo_SOURCES=demo.c。4.在目录/opt/emulation/mg-samples-1.3.1/src下,执行make命令,生成可执行文件demo;
5.修改/usr/local/etc目录下MiniGUI的配置文件MiniGUI.cfg6.在/opt/emulation/mg-samples-1.3.1/src目录下执行qvfb&命令;7.执行demo程序:[root@localhostsrc]#./demo主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用
6.4.1FrameBuffer简介
FrameBuffer是出现在linux2.2.xx及以上内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,写操作可以立即反映在屏幕上。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等等。在应用程序中,若想使用FrameBuffer,一般需要把FrameBuffer设备文件映射到进程地址空间。操作方法是首先打开/dev/fb0设备,然后通过mmap系统调用进行地址映射,接下来就可以对Framebuffer进行操作了。
6.4.2FrameBuffer驱动的添加将支持S3C2410的FrameBuffer驱动的源程序S3C2410fb.c编译进内核。为了保证编译成功,还需要对如下相关文件进行修改:kernel/drivers/video/Config.in这个文件包含许多与显示相关的配置信息。
kernel/drivers/video/Makefile在该文件中设置如果配置时选择了CONFIG_FB_S3C2410,就会将S3C2410FrameBuffer的驱动程序加入linux内核。
kernel/drivers/video/fbmem.c该文件的作用是告诉内核如何调用相应的FrameBuffer驱动。
6.4.3FrameBuffer设备文件的添加Linux要在嵌入式系统上运行,还需要文件系统的支持。应用程序对FrameBuffer驱动程序的使用是通过设备文件来进行的。所以,必须在文件系统中创建FrameBuffer相应的设备文件,才能让应用程序使用FrameBuffer驱动。由于设备文件使用了设备文件系统,因此,可以不必考虑其主次设备号,只需要考虑驱动程序调用的是设备fb0即可,但又因为设备文件系统生成的设备文件为fb/0,所以需要在文件系统中做一个符号连接,也就是当找到fb/0时,直接连接到fb0。要实现以上的符号连接,只需要在文件系统的/usr/etc/rc.local文件中添加
ln-sfb/0fb0
6.4.4FrameBuffer测试程序编写
FrameBuffer程序移植完成后,需要对其进行测试,确保没有问题后才能进行下一步MiniGUI的移植。测试程序的主要功能是:在文件系统中添加一个应用程序,通过系统调用打开/dev/fb0设备文件,显示相应的信息,并向映射的缓存写入显示数据,在LCD屏上显示间隔相等的多种颜色条纹。主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用
6.5.1安装MiniGUI的资源文件1、在PC机上对资源文件minigui-res-1.3.3.tar.gz解压缩;
[root@localhosttarget]#tarzxvfminigui-res-1.3.3.tar.gz2、进入minigui-res-1.3.3目录,安装资源文件;[root@localhostminigui-res-1.3.3]#makeinstall
3、把/opt/target/minigui/usr/local/lib目录下的minigui目录拷贝到要制作的cramfs文件系统的文件夹中。
6.5.2配置安装MiniGUI库文件1、确认安装了交叉编译器,即armv4l-unknown-linux系列的交叉编译器;2、改变目录到/opt/target/libminigui-1.3.3下,键入命令makemenuconfig进行配置;3、安装库文件:
makemakeinstall
4、去除库文件libminigui-1.3.so.3.0.0和libmgext-1.3.so.3.0.0中的调试信息和符号信息。armv4l-unknown-linux-striplibminigui-1.3.so.3.0.0
6.5.3MiniGUI的移植步骤要将MiniGUI移植到S3C2410,通常需要按照如下步骤进行:1.把已经去除调试信息和符号信息的MiniGUI库文件libminigui-1.3.so.3.0.0和libmgext-1.3.so.3.0.0,以及它们的符号连接文件,一同复制到要制作成cramfs文件系统的目录root_tech中的/lib下。2.把/opt/tgt/minigui/usr/local/lib下的minigui目录复制到要制作cramfs文件系统的目录中。比如放到该目录的/usr/sbin/下。当嵌入式系统运行时,应用程序在该minigui目录下调用相关的资源文件。3.在root_tech文件夹内,使用如下命令创建一个目录:mkdir–p/opt/host/armv4l/armv4l-unknown-linux/接下来,创建文件夹的符号连接:ln–s/lib/opt/host/armv4l/armv4l-unknown-linux/lib4.修改/opt/host/armv4l/armv4l-unknown-linux/etc目录下的MiniGUI.cfg文件,把存放资源的路径改为root_tech目录下对应的路径,从而使应用程序能够找到它使用的资源文件。修改后的MiniGUI.cfg文件要放到root_tech目录的/mnt/etc目录下。5.最后,把准备好的root_tech文件夹,利用mkcramfs命令,生成cramfs文件系统。生成的文件系统,可以通过imagewrite命令,利用NFS网络文件系统或U盘下载到目标系统中。主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用
6.6.1IAL引擎简介
MiniGUI引入了输入抽象层(GraphicsandInputAbstractLayer,即GAL和IAL)的概念。抽象层的概念类似于Linux虚拟文件系统的概念。它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的输入处理都建立在抽象接口之上。由于实现这一输入抽象接口的底层代码是一种类似于操作系统驱动程序的“输入引擎”,所以它的设计实际上是一种面向对象的程序结构。利用这种抽象接口,可以将MiniGUI方便地移植到其它POSIX系统上。一般嵌入式Linux操作系统都具有FrameBuffer的支持,所以针对特定嵌入式设备,只需要编写输入引擎IAL即可。
6.6.2IAL引擎的开发以4×4键盘为例,介绍IAL引擎的开发。BOOLInitADSInput(INPUT*input,constchar*mdev,constchar*mtype){ //只读形式打开键盘设备
kbd_fd=open("/dev/Kbd7279",O_RDONLY);if(kbd_fd<0){fprintf(stderr,"IAL:Cannotopentouchscreen!\n");returnFALSE;} //关闭键盘锁灯
led_off(); //输入引擎与虚拟接口间的联系
input->update_mouse=mouse_update;input->get_mouse_xy=mouse_getxy;input->set_mouse_xy=NULL;input->get_mouse_button=mouse_getbutton;input->set_mouse_range=NULL;input->update_keyboard=keyboard_update;input->get_keyboard_state=keyboard_getstate;input->set_leds=NULL;input->wait_event=wait_event;
mousex=0;
mousey=0;returnTRUE;}主要内容1426MiniGUI简介MiniGUI在Linux下运行环境的建立Linux下S3C2410FrameBuffer的启动MiniGUI输入引擎IAL的开发7在S3C2410上运行简单的绘图程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真应用6.7.1MiniGUI的基本绘图函数voidGUIAPISetPixel(HDChdc,intx,inty,gal_pixelc);
//设定像素值
voidGUIAPISetPixelRGB(HDChdc,intx,inty,intr,intg,intb);
//设定像素RGB值
gal_pixelGUIAPIGetPixel(HDChdc,intx,inty);//得到像素的坐标
voidGUIAPIGetPixelRGB(HDChdc,intx,inty,int*r,int*g,int*b);
//得到像素的RGB值voidGUIAPILineTo(HDChdc,int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级下册《买鲜花》课件版
- 2021届浙江省宁波市九校高一上学期期末联考数学试题(解析版)
- 人教版八年级上学期期中考试数学试卷-(含答案)
- 《风险投资方法》课件
- 2025年1月八省联考高考综合改革适应性测试-高三化学(内蒙古卷)
- 天津市和平区2023-2024学年高三上学期期末质量调查英语试卷
- 医药行业前台接待工作心得
- 家政服务保姆照顾技能培训总结
- 环保行业美工工作总结
- 贵州省安顺市紫云县2021-2022学年九年级上学期期末化学试题
- 智慧审计平台项目汇报
- 湖北省天门市2022-2023学年三年级上学期语文期末试卷(含答案)
- 《建筑赋比兴》一些笔记和摘录(上)
- 【服装企业比音勒芬服饰的财务问题分析(基于杜邦分析)9700字论文】
- 电气工程及其自动化低压电器中继电器应用
- 实验九(b)液体表面张力系数的测定(用毛细管法)
- 全球机场三字码、四字码
- 2023-2024学年重庆市两江新区四上数学期末质量检测试题含答案
- 泌尿外科内镜诊疗技术质量保障措施及应急预案
- M7.5浆砌块石挡土墙砌筑施工方法
- 2022年度黑龙江省重点新产品名单
评论
0/150
提交评论