简介
MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 年底开始开发。2002 年,魏永明先生创建北京飞漫软件技术有限公司,为 MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软件是中国地区为开源社区贡献代码最多的软件企业。最后一个采用 GPL 授权的 MiniGUI 版本是 1.6.10,从 MiniGUI 2.0.4 开始 MiniGUI 被重写并使用商业授权,从3.0.12开始,部分版本使用GPL授权。历经十余年时间, MiniGUI 已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统,支持Linux/uClinux、eCos、 uC/OS-II、 VxWorks、ThreadX、Nucleus 、pSOS、OSE 等操作系统和数十种 SoC芯片,已验证的硬件平台包括 ARM-based SoCs、MIPS based SoCs、IA-based SoCs、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等等。
准备工作
交叉编译器
友善提供,具体安装参考mini6410的使用手册;
源码的下载
从miniGUI官网上下载,需要有新浪账号或者twitter账号。下面是我下载的版本。
[root@localhost minigui]# ls -l *.tar.gz -rwxrw-rw-. 1 root root 1427072 Jan 16 17:30 freetype-1_3_1.tar.gz -rw-rw-r--. 1 root root 63582 Jan 16 17:31 gvfb-1_0_0.tar.gz -rw-rw-r--. 1 root root 602762 Jan 16 17:32 qvfb2-2_0.tar.gz -rwxrw-rw-. 1 root root 557220 Feb 11 00:56 zlib-1.2.6.tar.gz -rwxrw-rw-. 1 root root 1059513 Feb 11 00:55 libpng-1.5.8.tar.gz -rwxrw-rw-. 1 root root 986681 Feb 10 23:42 jpegsrc.v8c.tar.gz -rw-rw-r--. 1 root root 340656 Jan 16 17:33 libmg3d-1_0_2.tar.gz -rw-rw-r--. 1 root root 1545209 Jan 16 17:34 libmgi-2_0_4.tar.gz -rw-rw-r--. 1 root root 1116885 Jan 16 17:33 libmgp-1_2_2.tar.gz -rw-rw-r--. 1 root root 648207 Jan 16 17:34 libmgplus-1_2_4.tar.gz -rw-rw-r--. 1 root root 659702 Jan 16 17:33 libmgutils-1_0_4.tar.gz -rw-rw-r--. 1 root root 3202804 Jan 17 00:29 libminigui-gpl-3_0_12.tar.gz -rw-rw-r--. 1 root root 2608473 Jan 16 17:29 mg-samples-3_0_12.tar.gz -rw-rw-r--. 1 root root 3449215 Jan 16 17:29 minigui-res-be-3_0_12.tar.gz
官网上有几个库的版本太低,所以需要自己去网上下载,其中jpegsrc.v8c.tar.gz、libpng-1.5.8.tar.gz和zlib-1.2.6.tar.gz都是从网上找的最近版本(png和zlib这两个soucefoge上都有,前面一个是网上搜的,所以不能保证链接长期有效,但是网上搜一下还是比较容易找到的)。其实我也是在运行例子程序的时候才发现问题的,库更新后就可以正常运行了。
简单介绍一下使用到的几个库。
freetype:FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。
gvfb与qvfb2:这两个主要用于pc上仿真,在嵌入式平台上没用,就不做说明。
zlib:zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。
libpng:这个是用来显示png图形的,MiniGUI里很多图都是png的,如果没有这个库,MiniGUI将无法正常工作。
jpeg:用于显示jpeg图像,否则程序不能正常运行。
minigui-res:minigui3.0工具栏所使用的资源集合,包括字体、图标、位图等。
libminigui:minigui3.0的核心库。
mg-samples:minigui3.0的例子程序,有一两个小游戏,可以玩玩~~
minigui可选组件:libmg3d(3D支持)、libmgi(提供输入接口)、libmgp(提供打印机接口的支持)、libmgplus(2D矢量图支持和图像加速)、libmgutils(提供一些常用对话框的模板),可以根据自己的需要使用,在跑例子程序的时候使用到了libmgplus,所以就临时编了它的lib。
交叉编译图像库
先将代码解压到你所放置代码的位置,然后再进行如下步骤来编译安装图像库。我的安装目录是:/usr/local/minigui,可以根据自己的习惯和喜好安装在其他目录,通过prefix参数来配置安装目录。
编译zlib库
编译与配置脚本:
[root@localhost] CC=arm-linux-gcc \ CXX=arm-linux-g++ \ LD=arm-linux-ld \ AS=arm-linux-as \ AR=arm-linux-ar \ ./configure --prefix=/usr/local/minigui \ --shared #配置完成后 [root@localhost] make [root@localhost] make install
编译png库
[root@localhost] CC=arm-linux-gcc \ CXX=arm-linux-g++ \ LD=arm-linux-ld \ AS=arm-linux-as \ AR=arm-linux-ar \ ./configure --prefix=/usr/local/minigui \ --build=i386-linux \ --host=arm-linux \ --target=arm-linux [root@localhost] make [root@localhost] make install
编译Jpeg库
[root@localhost] CC=arm-linux-gcc \ CXX=arm-linux-g++ \ LD=arm-linux-ld \ AS=arm-linux-as \ AR=arm-linux-ar \ ./configure --prefix=/usr/local/minigui \ --build=i386-linux \ --host=arm-linux \ --target=arm-linux \ --enable-shared [root@localhost] make [root@localhost] make install
编译freetype库
自动配置还有问题,也没有尝试高版本的freetype能不能使用,暂时就先这样,好像例子代码里面并没有使用它。后面再尝试高版本的freetype。
[root@localhost] cd freetype-1.3.1/ [root@localhost] ./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui [root@localhost] vim config.cache # 修改如下行 ac_cv_path_LD=${ac_cv_path_LD=arm-linux-gnu-ld} ac_cv_prog_CC=${ac_cv_prog_CC=arm-linux-gnu-gcc} ac_cv_prog_CPP=${ac_cv_prog_CPP='arm-linux-gnu-gcc -E'} #重新配置 [root@localhost] ./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui # 修改Makefile文件,以跳过编译test目录。 # 去掉“all:”后的变量“tttest” # 注释掉“install:”下的第二行:“cd $(FTTESTDIR); $(MAKE) –f$(MAKEFILE) install” [root@localhost] make [root@localhost] make install
安装minigui资源库
[root@localhost] CC=arm-linux-gcc \ CXX=arm-linux-g++ \ LD=arm-linux-ld \ AS=arm-linux-as \ AR=arm-linux-ar \ ./configure --prefix=/usr/local/minigui [root@localhost] make [root@localhost] make install
编译minigui核心库
配置脚本:
[root@localhost] CC=arm-linux-gcc \ CXX=arm-linux-g++ \ LD=arm-linux-ld \ CFLAGS="-I/usr/local/minigui/include -I/opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include " \ CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include " \ CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include " \ ./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 [root@localhost] make [root@localhost] make install
遇到错误:pcxvfb.c:490:13: error: impossible constraint in ‘asm’,因为使用了错误的头文件,解决方法如下:
mv select.h select.h.bak cp /opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include/bits/select.h ./ rm select.h mv select.h.bak select.h
编译minigui例子程序
例子程序也不是一帆风顺的,从配置到最后编译都会有问题。具体配置脚本如下:
[root@localhost] CC=arm-linux-gcc \ CXX=arm-linux-g++ \ LD=arm-linux-ld \ CFLAGS="-I/usr/local/minigui/include -I/opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include " \ CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include " \ CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/arm/toolschain/4.5.1/arm-none-linux-gnueabi/include " \ ./configure --prefix=/usr/local/minigui \ --build=i386-linux \ --host=arm-linux \ --target=arm-linux
在配置阶段或遇到环境变量的问题,但是在配置了环境变量后还是出现错误,就直接在configure文件中添加了变量,这样才通过配置。修改如下:
vim configure # 在 $as_echo_n "checking for MINIGUI... " >&6; }后添加如下变量: MINIGUI_CFLAGS = /usr/local/minigui/include MINIGUI_LIBS = /usr/local/minigui/lib
然后开始make,又出现如下错误:no such file: File format not recognized collect2: ld returned 1 exit status。经过网上查资料后发现是生成的Makefile有问题,需要逐个修改Makefile。修改每个Makefile钟的如下行:
LIBS = -lminigui_ths -ljpeg -lm -lpthread -ldl LDFLAGS = -L/usr/local/minigui/lib
这样就可以通过编译并生成可执行文件了。
部署图像库
其实这个工作很简单,主要有两个步骤,一个修改minigui的配置文件,另一个是拷贝库文件到文件系统就可以了。配置文件在minigui的wiki上也有较详细的介绍,可以参考:《MiniGUI V3.0 的运行》
修改配置文件:
$ vim /usr/local/minigui/etc/MiniGUI.cfg # 修改如下参数 # GAL engine and default options gal_engine=fbcon # IAL engine ial_engine=console mdev=/dev/input/mice mtype=IMPS2 # 根据实际的显示大小填 [fbcon] defaultmode=480x272-16bpp
拷贝库到文件系统:
$ cp /usr/local/minigui/* /myrootfs/usr/local
拷贝你的例子程序就可以在开发板上运行了~~
参考文档和链接
- minigui的wiki
- MiniGUI-1.6.10 MiniGUI-1.6.10在mini2440上的移植(网络文档)
- miniGUI官网
你好!
我按照你的步骤,但是例子程序一直都编译不过。我跳过这一步,自己写了一个程序。但是一直报错如下:
[\root]#./usr/hello
KERNEL>InitGUI: Initialization of GDI failure!
KERNEL>InitGUI: Init failure, please check your MiniGUI configuration or resource.
请问你遇到过这个问题吗?如果能解决希望你能把解决方法发到我邮箱里。
谢谢!
看你的这个命令貌似是执行命令,报出的错误应该是配置文件错误,你查看一下你MiniGUI.cfg,对比一下试一下。如果没有搞定可以邮件我。
请教SG壁虎:
minigui的例程在我的arm板上报错:Inconsistency detected by ld.so: dl-deps.c: 622: _dl_map_object_deps: Assertion `nlist > 1′ failed!
我用的是ubuntu 10.04.3, 需要交叉编译到2.6.37的系统上,用的是arm-none-linux-gnueabi-gcc。
当把liminigui, minigui-res, mg-samples编译好了后.
–prefix=多是/home/xgh/work/minigui/
然后把这个目录下的内容cp到arm板子上的/usr/local/minigui下,
然后把mg-samples/src下编译好的例程cp到arm板的系统上,运行该例程:报::
Inconsistency detected by ld.so: dl-deps.c: 622: _dl_map_object_deps: Assertion `nlist > 1′ failed!
请问会是什么问题吗?
我编一个简单的hello.c(只有printf)。只用arm-none-linux-gnueabi-gcc hello.c -o hello,生成的可执行文件能在arm板上运行。
一旦加上-lminigui_ths, ljpeg, lpng, -lpthread, -ldl -lml… 就会上面同样的错误
应该是你开发班上的ld.so和你执行编译minigui的库是不一样的,你可以试着把你编译器下面的拷贝到arm板上。可能是arm板上和编译使用的库不同造成的。
请问 遇到错误:pcxvfb.c:490:13: error: impossible constraint in ‘asm’ 这个错误,解决方法那几个操作是在那个目录下操作的??
怎么我在Hi3515开发板上运行minigui3.0的例子,运行大概10秒就黑掉的??