实验八MiniGUI应用程序设计实验_第1页
实验八MiniGUI应用程序设计实验_第2页
实验八MiniGUI应用程序设计实验_第3页
实验八MiniGUI应用程序设计实验_第4页
实验八MiniGUI应用程序设计实验_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验八 MiniGUI应用程序设计实验一、实验目的1了解MiniGUI的基本结构。2练习MiniGUI的系统配置和编译安装。3交叉编译、在目标板上运行MiniGUI。4分析并了解 MiniGUI应用程序hello world。5在目标板上运行hello world程序。二、实验设备和仪器1计算机 2FS2410P教学实验平台三、实验内容及要求 1MiniGUI的系统配置和编译安装2分析并了解 MiniGUI应用程序hello world。3交叉编译MiniGUI应用程序hello world。4在开发板上运行hello world程序。四、实验原理及步骤 . 实验原理MiniGUI是一种面向嵌

2、入式系统和实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际可以运行在任何一种具有线程支持的POSIX兼容系统上。MiniGUI同时也是国内最早出现的几个自由软件项目之一。与Microwindows相比,MiniGUI和MicroWindows均为自由软件,只是前者遵循LGPL条款,后者遵循MPL条款。这两个系统的技术路线也有所不同。MiniGUI的策略是首先建立在比较成熟的图形引擎之上,比如 SVGALib和LibGGI,开发的重点在于窗口系统如图形接口; MicroWindows目前的开发重点则在底层的图形引擎,窗口系统和图形接口方面的功能还比较欠缺。举个例子来说,Mini

3、GUI有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括GB、Big5、Unicode等,而MicroWindows在多字符集的支持上尚没有统一接口。- MiniGUI最初是为了满足一个工业控制系统的需求而设计和开发的。这个工业控制系统是清华大学为一台数控机床设计的计算机数控系统(CNC)。在比较了DOS、Windows 98、Windows NT、Linux等系统之后,该项目组决定选择RT-Linux作为实时操作系统,以便满足2ms甚至更高的实时性。但是图形用户界面是一个问题,因为 X Window不适合于实时控制系统,并且当时X Window系统的本地化也不尽人意。因

4、此,项目组决定自己开发一套图形用户界面支持系统。这就是MiniGUI产生的背景。 您可以从北京飞漫软件技术有限公司的网站下载MiniGUI源代码、开发文档及示例程序。免费下载的MiniGUI只能用于开发GPL或其他公开源码的应用软件,如果您要利用MiniGUI开发专有或商业软件,则必须从北京飞漫软件技术有限公司购买商业授权。在嵌入式系统中,MiniGUI位于操作系统之上,应用程序之下,它为图形应用程序提供窗口、控件、事件管理、图形设备接口等相关接口。针对嵌入式Linux的MiniGUI应用软件开发,一般的开发步骤为:第1步.在运行Linux的PC机上安装MiniGUI,建立MiniGUI的运行

5、环境。第2步.在PC机上开发并调试MiniGUI应用程序。第3步.为目标系统编写MiniGUI的输入引擎,确保在目标系统上能够运行MiniGUI 第4步.在目标系统上运行并测试MiniGUI应用程序。2. 实验步骤2.1 在运行Linux的PC机安装并运行MiniGUI-STR(1) 下载MiniGUI-STR相关资源包登录:“.75/嵌入式系统/课程实验/嵌入式Linux系统开发实验/MiniGUI”或北京飞漫软件技术有限公司()下载MiniGUI-STR V1.6.2版本以及对应的资源和实例程序包:1) libminigui-str-1.6.2.tar.gz2) minigui-res-s

6、tr-1.6.tar.gz3) mg-samples-str-1.6.2.tar.gz并保存在/s3c2410目录下。(2) 建立MiniGUI的PC运行环境在运行Linux的PC机上,MiniGUI应用程序可以两种方式运行:n 在X Window系统上,运行在虚拟Frame Buffer程序qvfb中;n 在Linux的字符控制台上,运行在Linux内核提供的Frame Buffer驱动程序上不管是qvfb还是控制台下的Frame Buffer驱动程序,两者的本质是一样,即它们都为MiniGUI提供了一种可以用来绘图的底层设施,就像一块画布一样。1) QVFBQVFB是QT提供的一个虚拟Fr

7、ame Buffer工具,登录:“.75/嵌入式系统/课程实验/嵌入式Linux系统开发实验/MiniGUI”下载QVFB包(qvfb-1.0.tar.gz)到/s3c2410目录中。接着,按下面命令单独编译qvfb:#cd /s3c2410#tar zxf qvfb-1.0.tar.gz#./configure#make#make install执行完上述命令后,qvfb将被安装到默认的/usr/local/bin目录下。执行qvfb &命令: # qvfb &上述命令将启动qvfb程序,我们会在屏幕上看到qvfb程序会建立一个黑色的空白窗口,如图1所示:图1 (2) 配置L

8、inux的Frame Buffer驱动程序(略,具体请参考“Linux/ucLinux+MiniGUI:嵌入式系统开发原理、工具及过程”4.2.3节)(3)编译并安装MiniGUI-STRl 安装库文件#cd /s3c2410 #tar -zxvf libminigui-str-1.6.2.tar.gz#cd libminigui-str-1.6.2#./configure#make#make install不带任何参数执行./configure脚本将按照默认选项生成Makefile。在一切正常后,确保已经将/usr/local/bin目录添加到/etc/ld.so.conf文件中,然后运行l

9、dconfig命令新系统的共享库搜索缓存。#/sbin/ldconfig因为默认的配置脚本将把MiniGUI的配置文件、函数库和头文件安装到以/usr/local为前缀的目录树中,具体说来:n 运行时配置文件将被安装到/usr/local/etc/ 目录下n 库文件将被安装到/usr/local/lib/目录下n 头文件将被安装到/usr/local/include/minigui/ 目录下l 安装资源文件#cd /s3c2410 #tar -zxvf minigui-res-str-1.6.tar.gz#cd minigui-res-str-1.6#make install 默认的安装脚本会

10、把MiniGUI资源文件安装到/usr/local/include/minigui/res/目录下(4)运行MiniGUI-STR示例程序#cd /s3c2410 #tar zxf mg-samples-str-1.6.2.tar.gz#cd mg-samples-str-1.6.2#make 在qvfb中运行MiniGUI应用程序,操作步骤如下:1)#qvfb /启动qvfb2)点击qvfb的菜单:,设置成320X240 16位色的显示模式3)修改MiniGUI的运行时配置文件:/usr/local/etc/MiniGUI.cfg,指定要使用的图形引擎和输入引擎名称及相关参数,如下所示:修改

11、完成后,输入命令:#cd /s3c2410/mg-samples-str-1.6.2/src#./helloworld就可以运行已经编译好的MiniGUI示例程序。MiniGUI的窗口将显示在qvfb程序创建的窗口中,如图4所示:图42.2在目标板S3C2410上运行MiniGUI应用程序(1)交叉编译MiniGUI源代码:l 安装库文件:#cd /s3c2410 #tar -zxvf libminigui-str-1.6.2.tar.gz #cd libminigui-str-1.6.2 # ./configure -prefix=/usr/local/arm/2.95.3/arm-linu

12、x/ -host=arm-Linux -build=i386-linux -target=arm-linux -with-osname=linux -with-style=pc3d -disable-cursor -disable-micemoveable -disable-nativegal -enable-threads -disable-textmode -enable-dummyial -enable-nativeial -enable-newgal -disable-savebitmap -enable-imegb2312 -enable-jpgsupport -enable-png

13、support -disable-savescreen -enable-tinyscreen 解析:-target=arm-linux 用于指定目标平台类型,一般格式为“CPU类型-操作系统名称”;-prefix选项用于指定MiniGUI函数库的安装路径,默认的安装路径是/usr/local,交叉编译时不能使用默认值,否则它会覆盖本机的文件,本文使用交叉编译器环境的系统头文件和库文件所在目录:/usr/local/arm/2.95.3/arm-linux。#make #make install 在/usr/local/arm/2.95.3/arm-linux/include目录下会产生一个mi

14、nigui的目录,包含.h后缀的头文件; 在/usr/local/arm/2.95.3/arm-linux/etc目录下会生成一个MiniGUI.cfg的配置文件,MiniGUI运行时需要使用MiniGUI.cfg配置文件,主要配置图形引擎,输入引擎,窗口字体等等;MiniGUI应用程序运行时,会先寻找用户主目录下的MiniGUI.cfg,其次是/usr/local/arm /2.95.3/arm-linux/etc/MiniGUI.cfg,最后是/etc/MiniGUI.cfg; 在/usr/local/arm/2.95.3/arm-linux/lib目录下会产生库文件,如图2所示:图2 l

15、 安装资源文件#cd /s3c2410 #tar -zxvf minigui-res-str-1.6.tar.gz#cd minigui-res-str-1.6 #vi configure.linux先打开configure.linux文件修改并保存,将第12行处:prefix选项部分的默认值修改为交叉编译器所在的目录下,如图3所示图3#make install在/usr/local/arm/2.95.3/arm-linux/lib/minigui目录下会产生一个res目录,该目录下保存有MiniGUI的资源文件,如图标、位图和字体等。(2)编写hello world.c程序在s3c2410目

16、录下,编辑源程序hello world.c,在FS2410P的液晶屏上实现“Hello MiniGUI!”字符输出。n 源代码见附录1n 编辑源程序 #cd /s3c2410#vi 交叉编译源程序arm-linux-gcc -o helloworld helloworld.c libminigui - libpthread解析:-o选项告诉gcc要生成的目标文件名,这里是helloworld,-l选项指定要链接的库,这里链接的是libminigui库和libpthread库。 libpthread是提供POSIX兼容线程支持的函数库,编译MiniGUI-Thread

17、s程序时必须连接这个函数库;我们所编译的程序只使用了MiniGUI核心库libminigui 中的函数,没有使用MiniGUI其他库提供的函数(比如libmgext或者libvcongui),因此只需链接libminigui库,用-libminigui lpthread表示。(3)制作根文件系统制作根文件系统时,需要把资源文件、配置文件、动态库和可执行应用程序拷贝到目标系统文件系统的相应位置,同时在配置文件中相应修改。 #cd / #mkdir /tmpdir #mount FS2410XP_camare_demo.cramfs o loop #cd tmpdir #tar cvf ./roo

18、t1.tar ./#cd / #umount tmpdir #mkdir root_mini #tar xvf root1.tar C root_mini此时, root_mini文件夹为即将生成的根文件系统,对其进行修改如下:² 将helloworld可执行程序拷贝到/root-mini/home目录下² 将库文件拷贝到/root-mini/usr/local/lib目录下² 将资源文件res目录拷贝到/root-mini/usr/local/lib/minigui目录下² 将配置文件MiniGUI.cfg拷贝到根文件系统的/root-mini /us

19、r/local/etc文件夹,并修改如下:#vi /root-mini /usr/local/etc# IAL engineial_engine=dummy /mdev=/dev/mousemtyoe=nonedefaultmode=240X320-16bppial_engine一开始建议使用dummy,先让minigui运行起来,以后思考如何把触摸屏加进去,保证尽可能减少错误的发生。修改/root-mini/etc/ld.so.conf,在最后加入下列所示的目录:/usr/local/lib/usr/lib并且执行#vi /root-mini /usr/local/etc开始制作根文件系统

20、#cd / #./mkcramfs root-mini root-mini.cramfs (4)在目标板上执行helloworld程序使用网络传输工具t将重新生成的根文件系统下载到目标平台,烧写完成后重启动,在minicom终端进入目标系统,对应用程序进行测试(关于t的使用参见实验) none# cd /homenone# ./helloworld结果如图:附录1:helloworld.c源代码#include <stdio.h>#include <minigui/common.h>#include <minigui/minigui.h>#include &

21、lt;minigui/gdi.h>#include <minigui/window.h>/* common.h 包括MINIGUI常用的宏以及数据类型的定义* minigui.h 包含了全局的和通用的接口函数以及某些杂项函数的定义* gdi.h 包含了MINIGUI绘图函数的接口定义* window.h 包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明* 使用预定义控件的MINIGUI应用程序还必须包括另外一个头文件 <minigui/control.h>* 一个MINIGUI程序的入口点为MiniGuiMain,该函数原型如下:* int MiniGU

22、IMain (int argc,const char* argv)*/Static int HelloWinProc(HWND hWnd, int message ,WPARAM wParam,LPARAM lParam) /窗口过程函数HDC hdc;Swtch (message)Case MSG_PAINT:Hdc = BeginPaint (hwnd);Textout (hdc,100,100,”Hello world!”);EndPaint (hWnd,hdc);Return 0; Case MSG_CLOSE:DestroyMainWindow (hwnd);PostQuitMess

23、age (hWnd);Return 0; Return DefaultMainWinProc(hWnd,message,wParam,lParam);int MiniGUIMain ( int argc,const char* argv )MSG Msg;HWND hMain;MAINWINCREATE CreateInfo;/*设置显示区域*可以用JoinLayer函数来代替SetDesktopRect*/#ifdef _LITE_VERSIONSetDesktopRect(0,0,800,600);#endifCreateInfo.dwStyle = WS_VISIBLE | WS_BOR

24、DER | WS_CAPTION; /*设置主窗口的风格,这里把窗口设置为初始可见的,并具有边框和标题栏*/CreateInfo.dwExStyle = WS_EX_NONE;/*设置主窗口的扩展风格,该窗口没有扩展风格*/CreateInfo.spCaption = “HelloWord”;/*设置主窗口的标题为“HelloWorld”*/CreateInfo.hMenu = 0;/*设置主窗口的主菜单,该窗口没有主菜单*/CreateInfo.hCurso r =GetSystemCursor(0);/*设置主窗口的光标为系统缺省光标*/CreateInfo.hIcon = 0;/*设置主

25、窗口的图标,该窗口没有图标*/CreateInfo.MainWindowProc = HelloWinProc;/*设置主窗口的窗口过程函数为HelloWinProc,所有发往该窗口的消息由该函数处理*/CreateInfo.lx = 0;CreateInfo.ty = 0;CreateInfo.rx = 320;CreateInfo.by = 240;/*设置主窗口在屏幕上的位置,该窗口左上角位于(0,0),右下角位于(320,240)*/CreateInfo.iBkColor = COLOR_lightwhite;/*设置主窗口的背景色为白色*/CreateInfo.dwAddData = 0;/*设置主窗口的附加数据,该窗口没有附加数据*/CreateInfo.hHosting = HWND_DESKTOP; /*设置出窗口的托管窗口为桌面窗口*/*创建和显示主窗口,调用CreateMainWindow函数来创建一个主窗口*其参数是指向MAINWINCREATE结构的指针,返回值为所创建主窗口的句柄*/hMainWnd = CreateMainWindow (&CreateInfo);if (h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论