MiniGUI移植
- 格式:ppt
- 大小:348.50 KB
- 文档页数:15
嵌入式Linux环境下MiniGUI的研究与移植近年来随着设备与市场需求的广泛结合,手机、PDA等产品的应用对可视化操作界面的简洁和便利提出了更高的要求,这都需要一个稳定牢靠的高性能GUI系统来提供支持。
图形用户界面(Graphic User Interface,简称GUI)的广泛流行是当今计算机技术的重要成就之一,它极大地便利了非专业用户的用法,人们可以通过窗口、菜单便利地举行操作。
嵌入式系统对GUI的基本要求包括有轻型、占用资源少、高性能、高牢靠性以及可配置等。
MiniGUI是目前比较常用的几种GUI系统之一,与其他的GUI相比,MiniGUI最显著的特点就是轻型、占用资源少,而且在这几年的进展里,MiniGUI已经十分成熟和稳定了,在许多产品和项目中都已得到了实际应用。
1 MiniGUI的特点和体系结构1. 1 MiniGUI的特点MiniGUI是由原清华高校老师魏永明主持开发的轻量级图形系统,是一种面对嵌入式或实时系统的图形用户界面支持系统。
它遵循GPL公约,是基于SVGALib及Thread库的多窗口GUI支持系统。
能跨多种操作系统,主要运行于linux及一切具有POSIX线程支持的POSIX兼容系统,包括一般嵌入式Linux、eCos、uC/OS-II、等系统,是国内最早的自由软件之一。
MiniGUI的主要特点有:(1) 遵循GPL条款的纯自由软件;(2) 提供了完备的多窗口机制;(3) 多字符集和多字体支持,目前支持ISO8859-1、GB2312及Big5等字符集,并且支持各种光栅字体和TrueType、Type1等矢量字体;(4) 全拼和五笔等汉字输入法支持;(5) BMP、GIF、JPEG及PCX等常见图像文件的支持;(6) Windows的资源文件支持,如位图、图标、光标、插入符、定时器及加速键等;(7) 可移植性好。
1.2 MiniGUI的体系结构1.2.1 多线程的分层设计从整体结构上看,MiniGUI是分层设计的,结构1所示。
MiniGUI3.0.12及组件下载地址/downloads/index.html libmgplus-1.2.4下载地址/download/yong_f/40628071. 需要下载的组件libminigui-gpl-3_0_12.tar.gzmg-samples-3_0_12.tar.gzfreetype-1_3_1.tar.gzjpegsrc_v7.tar.gzlibpng-1_2_37.tar.gzminigui-res-be-3_0_12.tar.gzzlib-1_2_2.tar.gzqvfb2-2.0libmgplus-1.2.4(可以在csdn上下载到)(qvfb所需要的包)libqt3-mtlibqt3-mt-devalienqt-devel-3.3.8-4.fc7.i386.rpm2.安装各组件<1>libminigui-gpl-3_0_12.tar.gz(库)./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo makesudo make install<2>minigui-res-be-3_0_12.tar.gz(资源包)./configure --prefix=/usr/localsudo makesudo make install<3>freetype-1_3_1.tar.gz./configure --prefix=/usr/localsudo makesudo make install(在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的Print_Mem( memory_footprint.##field, string )改为: Print_Mem( memory_footprint.field, string )#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )<4>安装PNG库./configure --prefix=/usr/localsudo makesudo make install<5>安装JPEG库./configure --prefix=/usr/local --enable-sharedsudo makesudo make install<6>安装zlib库./configure --prefix=/usr/localsudo makesudo make install<7>libmgplus-1.2.4./configure --prefix=/usr/localsudo makesudo make install将/usr/local/lib加入到.bashrc中<8>安装qvfb2(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包) sudo apt-get install libqt3-mtsudo apt-get install libqt3-mt-devsudo apt-get install aliensudo alien qt-devel-3.3.8-4.fc7.i386.rpmdpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb(开始安qvfb)cd qvfb2-2.0./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3sudo makesudo make install(qvfb2与1不同,没有文件输入是不会显示出框图的)<9>修改MiniGUI.cfg[system]# GAL engine and default optionsgal_engine=pc_xvfb(修改此处)defaultmode=640x480-16bpp(修改此处)# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2[fbcon]defaultmode=1024x768-16bpp[qvfb]defaultmode=640x480-16bppwindow_caption=QVFB-for-MiniGUI-3.0exec_file=/usr/local/bin/qvfbdisplay=0#{{ifdef _MGGAL_PCXVFB[pc_xvfb]defaultmode=640x480-16bppwindow_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)exec_file=/usr/local/bin/qvfb2(修改此处)display=0#}}<10>mg-samples-3.0.12 并运行./configure --prefix=/usr/localsudo makesudo make install./same/same问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对解决办法:将/usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向libjpeg.so.7.0.0 然后修改/usr/include/jpeglib.h 中的版本号为70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)(关于miniGUI在2440上的移植会在下篇更新)以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自/forum/showtopic-3899.aspx采用交叉编译方式【软件环境】PC:ubuntu 10.04开发板:Linux 2.6.32.2@2440Target: arm-none-linux-gnueabigcc version 4.4.3编译minigui3.0并移植需要的文件有(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本):FreeType库:minigui字体引擎freetype-1_3_1.tar.gzJPEG库:minigui显示jpeg图片jpegsrc.v8c.tar.gzpng库:minigui显示png图片libpng-1.0.59.tar.gzzlib库:minigui数据压缩函数库zlib-1.2.6.tar.gzminigui所用到的资源minigui-res-be-3_0_12.tar.gzminigui核心库libminigui-gpl-3_0_12.tar.gzminigui样例mg-samples-3_0_12.tar.gzStep1:建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压tar xzf freetype-1_3_1.tar.gztar xzf jpegsrc.v8c.tar.gztar xzf libpng-1.0.59.tar.gztar xzf zlib-1.2.6.tar.gztar xzf minigui-res-be-3_0_12.tar.gztar xzf libminigui-gpl-3_0_12.tar.gztar xzf mg-samples-3_0_12.tar.gzStep2:[编译Freetype库]cd freetype-1.3.1/(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui修改Makefile第12行all: ttlib ttest ttpo为all: ttlib ttpo第34行注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误ftdump.c:172:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:182:1: error: pasting "." and "first_instance" does not give a valid preprocessing tokenftdump.c:191:1: error: pasting "." and "second_instance" does not give a valid preprocessing tokenftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing tokenftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:203:1: error: pasting "." and "second_instance" does not give a valid preprocessing token(B)make(C)make install[编译JPEG库]cd jpeg-8c/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar如(后面的库的编译修改configure亦如此):## M4sh Initialization. #### -------------------- ### Be more Bourne compatibleCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arDUALCASE=1; export DUALCASE # for MKS shif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux --enable-shared(C)make(D)make install[编译PNG库]cd libpng-1.0.59/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make(D)make install[编译zlib库]cd zlib-1.2.6/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --shared(C)make(D)make install[编译资源库]cd minigui-res-be-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui(C)make(D)make install[编译核心库]cd libminigui-gpl-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)(B)./configure --prefix=/usr/local/minigui --host=arm-linux \--target=arm-linux --build=i386-linux --with-osname=linux \--with-style=classic --with-targetname=fbcon --enable-autoial \--enable-rbf16 --disable-vbfsupport --enable-tslibial(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到)(C)make(D)make install[编译示例库]cd mg-samples-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?查看根目录下的Makefile(vi Makefile),(line 204)会发现:COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \lf_skin font_text look_feel dbuff notebook same graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
miniGUI3.0.12移植到Hi3531分类:linux2013-04-22 10:01 412人阅读评论(1) 收藏举报minigui hi3531miniGUI3.0.12移植到Hi3531之前一直在用miniGUI2.0的版本,看到现在miniGui3.0 GPL开源了,所以下载来移植到Hi3531平台上,下面阿来详细将这个移植过程记录如下:一、移植资源包:下载miniGUI3.0.12组件简单介绍一下各个库:freetype:字体qvfb2和gvfb::虚拟显存,主要用在pc机上做仿真jpegsrc:显示jpeg图像时要用到的库libpng:显示png图像时要用到的库zlib:PNG压缩算法libminigui:minigui3.0.12的核心库minigui-res:minigui3.0.12资源文件,包括字体、图标、位图等mg-samples:minigui3.0.12例子程序minigui3.0.12可选组件: libmg3d(3D支持)、libmgi(提供输入接口)、libmgp(提供打印机接口的支持)、libmgplus(2D矢量图支持和图像加速)、libmgutils(提供一些常用对话框的模板),可以根据自己的需要来使用。
在这里我只安装了freetype,zlib,,jpegsrc,,libpng,libmgplus以及res,主库,和sample。
这里提示下,下面操作的安装目录是:/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi 这里你自己选择合适的安装目录就可以了。
二、编译zlib库编译配置脚本:1.[root@localhost]CC=arm-hisiv100nptl-linux-gcc \2.CXX=arm-hisiv100nptl-linux-g++ \3.LD=arm-hisiv100nptl-linux-ld \4.AS=arm-hisiv100nptl-linux-as \5.AR=arm-hisiv100nptl-linux-ar \6. ./configure \7.--prefix=/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi \8. --shared9.[root@localhost] make10.[root@localhost] make install三、编译png库编译配置脚本:1.[root@localhost]CC=arm-hisiv100nptl-linux-gcc \2.CXX=arm-hisiv100nptl-linux-g++ \3.LD=arm-hisiv100nptl-linux-ld \4.AS=arm-hisiv100nptl-linux-as \5.AR=arm-hisiv100nptl-linux-ar \6. ./configure \7.--prefix=/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi \8.--build=i386-linux \9.--host=arm-hisiv100nptl-linux \10.--target=arm-hisiv100nptl-linux \11.[root@localhost] make12.[root@localhost] make install注意;如果编译时报错提示zlib库没有安装的,解决方法:在编译之前(我是在configure之前),手动指定一下参数:1.export CFLAGS="-I/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/include"2.export LDFLAGS="-L/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/lib"四、编译jpeg库编译配置脚本:1.[root@localhost]CC=arm-hisiv100nptl-linux-gcc \2.CXX=arm-hisiv100nptl-linux-g++ \3.LD=arm-hisiv100nptl-linux-ld \4.AS=arm-hisiv100nptl-linux-as \5.AR=arm-hisiv100nptl-linux-ar \6. ./configure \7.--prefix=/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi \8.--build=i386-linux \9.--host=arm-hisiv100nptl-linux \10.--target=arm-hisiv100nptl-linux \11. --enable-shared \12.[root@localhost] make13.[root@localhost] make install五、编译freetype库编译配置脚本:1.[root@localhost]./configure \2.--host=arm-hisiv100nptl-linux \3.--prefix=/opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi \4. --enable-static \运行配置脚本后,修改:1.[root@localhost] vim config.cache2.# 修改如下行3.ac_cv_path_LD=${ac_cv_path_LD=arm-linux-gnu-ld}4.ac_cv_prog_CC=${ac_cv_prog_CC=arm-linux-gnu-gcc}5.ac_cv_prog_CPP=${ac_cv_prog_CPP='arm-linux-gnu-gcc -E'}6.#重新配置,再运行一次配置脚本7.#修改Makefile文件,以跳过编译test目录。
MiniGui安装和移植一MiniGui的安装首先从MiniGui官网上下载安装文件。
一共需要下载三个压缩文件:libminigui-1.6.10.tar.gz、minigui-res-1.6.10.tar.gz、mg-samples-1.6.10.tar.gz。
安装步骤如下:一:解压缩安装包。
# tar xzvf libminigui-1.6.10.tar.gz二:运行配置程序。
# cd libminigui-str-1.6.10#./configure –disable-jpgsupport –disable-pngsupport三:编译MiniGui源代码# make四:安装MiniGui函数库# su –c “make install”五:查看安装好的库文件MiniGui的动态库文件和静态库文件都被安装到了/usr/local/lib目录下:#ls –l /usr/local/lib而MiniGui相关的头文件则被安装到了/usr/local/include/minigui/目录下Ls –l /usr/local/include/minigui运行时需要配置文件在/usr/local/etc/目录下Ls –l /usr/local/etc这样便完成了MiniGui函数库libminigui-1.6.10.tar.gz的安装接下安装资源包资源包minigui-res-1.6.10.tar.gz并不需要编译,直接安装即可。
解压缩文件#tar xzvf minigui-res-1.6.10.tar.ga打开minigui-res-1.6.10文件#cd minigui-res-1.6.10安装函数库# su –c ”make install”默认情况下,这些资源文件被安装在/usr/local/lib/minigui/res目录下# la /usr/local/lib/minigui/res解压示例代码包# tar mg-samples-1.6.10.tar.gz 打开mg-samples-1.6.10文件# cd mg-samples-1.6.10#./configure编译#make成功编译完成后,就可以在mg-samples-1.6.10/src目录下看到一些被编译好的可执行程序。
嵌入式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]由原清华大学教师魏永明先生开发,是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。
MiniGUI 1.3.3 移植详解作者:大漠孤狼 E-Mail:yuqiang0107@最近移植了 MiniGUI 1.3.3 到一个开发板上,中间遇到许多问题,在论坛上发问题,结果也没多少人回我,就算偶尔有回的,基本上回答也没有什么用,网上找不到一个完整的移植文章,所以就决定把自己这次移植摸出来的一些方法写出来,给像我一样的小菜鸟做个参考吧。
本文不教你怎么写驱动,只是教怎么样在最短的时候在你的PC机上搭建起开发环境,同时在你的板子上跑起MiniGUI 来,这样你就可以在PC 上开发好程序,调试完毕,然后交叉编译一下,直接Copy到板子上就可以了。
首先,你需要下载的MiniGUI 的包:/download/libminigui-1.3.3.tar.gz/download/minigui-res-1.3.3.tar.gz这两个包的下载需要你在 上注册过才可以下载,免费注册的,自己去下吧/downloads/minigui13/mde-1.3.0.tar.gz图形界面程序/downloads/minigui13/mg-samples-1.3.0.tar.gz一些小例子好,首先就下载这几个包吧,后面还有需要下载的包,后面再说1.PC环境的搭建首先你需要一个 Linux 环境,我安装的是 RedHat 9.0 安装时记着选 everything ,这样可以避免到时候编译少了东西。
这里搭建的环境是让 MiniGUI 在你的 PC 上可以跑起来,这样以后你开发程序就可以只在 PC 上开发,调试好,最后交叉编译一下放到板子上就行了。
后面会讲怎么为板子编译MiniGUI ,耐心的看吧:)首先建立自己的开发目录[Root]# mkdir /opt[Root]# cd /opt[Root]# mkdir st2410 //这个是我的板子,[Root]# chmod 777 st2410 //给一般用户操作权限[user]# cd /opt/st2410 //进到目录中去,在这个目录下工作,用普通用户来工作把 libminigui-1.3.3.tar.gz 解开[user]# tar zxf libminigui-1.3.3.tar.gz[user]# tar zxf minigui-res-1.3.3.tar.gz编译 libminigui ,这个是 minigui 运行所必需的库文件,必须编译成功[user]# cd libminigui-1.3.3[user]# ./configure //最简单的编译方式,让它自己去配置,这里采用缺省的Thread 模式而不是Lite模式,因为这种方式在 PC 机上使用最方便,后面移到板子上再改成 Lite 模式即可注意屏幕上的输出,特别是下面几条checking for FrameBuffer console support... yeschecking for pthread library... yeschecking for TT_FreeType_Version in -lttf... yeschecking for T1_InitLib in -lt1... nochecking for jpeg_std_error in -ljpeg... yeschecking for png_check_sig in -lpng... yes其中–lttf –lpng 必须是 yes ,不然后面你的程序肯定会有问题,如果这里不是 yes 的话,肯定是你的 Redhat 9 安装不对,告诉过你安装时选 everything ,你选了吗???其中 ttf 库是对 TrueType 字体的支持,png 库是对 png 图形的支持,MiniGui 里都需要这两个,在后面为板子交叉编译的时候也需要这两个,不然你的程序跑不起来,切记切记。