简介

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 等等。

准备工作

源码的下载

从miniGUI官网上下载,需要有新浪账号或者twitter账号。下面是我下载的版本。

  1. 01 [root@localhost minigui]# ls -l *.tar.gz
  2. 02 -rwxrw-rw-. 1 root root 1427072 Jan 16 17:30 freetype-1_3_1.tar.gz
  3. 03 -rw-rw-r--. 1 root root 63582 Jan 16 17:31 gvfb-1_0_0.tar.gz
  4. 04 -rw-rw-r--. 1 root root 602762 Jan 16 17:32 qvfb2-2_0.tar.gz
  5. 05 -rwxrw-rw-. 1 root root 557220 Feb 11 00:56 zlib-1.2.6.tar.gz
  6. 06 -rwxrw-rw-. 1 root root 1059513 Feb 11 00:55 libpng-1.5.8.tar.gz
  7. 07 -rwxrw-rw-. 1 root root 986681 Feb 10 23:42 jpegsrc.v8c.tar.gz
  8. 08 -rw-rw-r--. 1 root root 340656 Jan 16 17:33 libmg3d-1_0_2.tar.gz
  9. 09 -rw-rw-r--. 1 root root 1545209 Jan 16 17:34 libmgi-2_0_4.tar.gz
  10. 10 -rw-rw-r--. 1 root root 1116885 Jan 16 17:33 libmgp-1_2_2.tar.gz
  11. 11 -rw-rw-r--. 1 root root 648207 Jan 16 17:34 libmgplus-1_2_4.tar.gz
  12. 12 -rw-rw-r--. 1 root root 659702 Jan 16 17:33 libmgutils-1_0_4.tar.gz
  13. 13 -rw-rw-r--. 1 root root 3202804 Jan 17 00:29 libminigui-gpl-3_0_12.tar.gz
  14. 14 -rw-rw-r--. 1 root root 2608473 Jan 16 17:29 mg-samples-3_0_12.tar.gz
  15. 15 -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库

编译与配置脚本:

  1. [root@localhost] CC=arm-linux-gcc \
  2. CXX=arm-linux-g++ \
  3. LD=arm-linux-ld \
  4. AS=arm-linux-as \
  5. AR=arm-linux-ar \
  6. ./configure --prefix=/usr/local/minigui \
  7. --shared
  8. #配置完成后
  9. [root@localhost] make
  10. [root@localhost] make install

编译png库

  1. [root@localhost] CC=arm-linux-gcc \
  2. CXX=arm-linux-g++ \
  3. LD=arm-linux-ld \
  4. AS=arm-linux-as \
  5. AR=arm-linux-ar \
  6. ./configure --prefix=/usr/local/minigui \
  7. --build=i386-linux \
  8. --host=arm-linux \
  9. --target=arm-linux
  10. [root@localhost] make
  11. [root@localhost] make install

编译Jpeg库

  1. [root@localhost] CC=arm-linux-gcc \
  2. CXX=arm-linux-g++ \
  3. LD=arm-linux-ld \
  4. AS=arm-linux-as \
  5. AR=arm-linux-ar \
  6. ./configure --prefix=/usr/local/minigui \
  7. --build=i386-linux \
  8. --host=arm-linux \
  9. --target=arm-linux \
  10. --enable-shared
  11. [root@localhost] make
  12. [root@localhost] make install

编译freetype库

自动配置还有问题,也没有尝试高版本的freetype能不能使用,暂时就先这样,好像例子代码里面并没有使用它。后面再尝试高版本的freetype。

  1. 01 [root@localhost] cd freetype-1.3.1/
  2. 02 [root@localhost] ./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui
  3. 03 [root@localhost] vim config.cache
  4. 04 # 修改如下行
  5. 05 ac_cv_path_LD=${ac_cv_path_LD=arm-linux-gnu-ld}
  6. 06 ac_cv_prog_CC=${ac_cv_prog_CC=arm-linux-gnu-gcc}
  7. 07 ac_cv_prog_CPP=${ac_cv_prog_CPP='arm-linux-gnu-gcc -E'}
  8. 08 #重新配置
  9. 09 [root@localhost] ./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui
  10. 10 # 修改Makefile文件,以跳过编译test目录。
  11. 11 # 去掉“all:”后的变量“tttest”
  12. 12 # 注释掉“install:”下的第二行:“cd $(FTTESTDIR); $(MAKE) –f$(MAKEFILE) install”
  13. 13 [root@localhost] make
  14. 14 [root@localhost] make install

安装minigui资源库

  1. [root@localhost] CC=arm-linux-gcc \
  2. CXX=arm-linux-g++ \
  3. LD=arm-linux-ld \
  4. AS=arm-linux-as \
  5. AR=arm-linux-ar \
  6. ./configure --prefix=/usr/local/minigui
  7. [root@localhost] make
  8. [root@localhost] make install

编译minigui核心库

配置脚本:

  1. [root@localhost] CC=arm-linux-gcc \
  2. CXX=arm-linux-g++ \
  3. LD=arm-linux-ld \
  4. CFLAGS="-I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
  5. CPPFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
  6. CXXFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
  7. ./configure --prefix=/usr/local/minigui \
  8. --host=arm-linux \
  9. --target=arm-linux \
  10. --build=i386-linux \
  11. --with-osname=linux \
  12. --with-style=classic \
  13. --with-targetname=fbcon \
  14. --enable-autoial \
  15. --enable-rbf16 \
  16. --disable-vbfsupport
  17. [root@localhost] make
  18. [root@localhost] make install遇到错误:pcxvfb.c:490:13: error: impossible constraint in asm’,因为使用了错误的头文件,解决方法如下:
  19. 修改Makefile src/newgal/pcxvfb/Makefile,把相关的地方都去掉,就两个地方如下:
  20. #oldincludedir = /usr/include
  21. INCLUDES = -I$(abs_top_srcdir)/src/include -I$(abs_top_srcdir)/include \
  22. -I$(abs_top_srcdir)/src/newgal/ -I/usr/include

编译minigui例子程序

例子程序也不是一帆风顺的,从配置到最后编译都会有问题。具体配置脚本如下:

  1. [root@localhost] CC=arm-linux-gcc \
  2. CXX=arm-linux-g++ \
  3. LD=arm-linux-ld \
  4. CFLAGS="-I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
  5. CPPFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
  6. CXXFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
  7. ./configure --prefix=/usr/local/minigui \
  8. --build=i386-linux \
  9. --host=arm-linux \
  10. --target=arm-linux

在配置阶段或遇到环境变量的问题,但是在配置了环境变量后还是出现错误,就直接在configure文件中添加了变量,这样才通过配置。修改如下:

出现error:

  1. checking for MINIGUI... configure: error: Package requirements (minigui >= 3.0.10) were not met:
  2. No package 'minigui' found
  3. Consider adjusting the PKG_CONFIG_PATH environment variable if you
  4. installed software in a non-standard prefix.

修改,添加PKG_CONFIG_PATH路径 ,重新configure

  1. #./configure --prefix=/home/walkman/Downloads/minigui/source/ --build=i386-linux --host=arm-linux --target=arm-linux
  2. export PKG_CONFIG_PATH=/usr/local/minigui/lib/pkgconfig

修改dbuff目录下的watch.c文件将类型修改为int类型

注释ctrl_dlg目录下的dlgdemo.c文件

部署图像库

其实这个工作很简单,主要有两个步骤,一个修改minigui的配置文件,另一个是拷贝库文件到文件系统就可以了。配置文件在minigui的wiki上也有较详细的介绍,可以参考:《MiniGUI V3.0 的运行》

修改配置文件:

  1. view source
  2. print?
  3. 01 $ vim /usr/local/minigui/etc/MiniGUI.cfg
  4. 02 # 修改如下参数
  5. 03 # GAL engine and default options
  6. 04 gal_engine=fbcon
  7. 05
  8. 06 # IAL engine
  9. 07 ial_engine=console
  10. 08 mdev=/dev/input/mice
  11. 09 mtype=IMPS2
  12. 10
  13. 11 # 根据实际的显示大小填
  14. 12 [fbcon]
  15. 13 defaultmode=480x272-16bpp
  16. 拷贝库到文件系统:
  17. 1 $ cp /usr/local/minigui/* /myrootfs/usr/local

拷贝你的例子程序就可以在开发板上运行了~~

qvfb2 的安装(进入 qvfb2 的源码目录,运行如下命令):

./configure --with-qt-includes=/usr/include/qt3 --with-qt-libraries=/usr/lib/qt3

配置qvfb路径

在/ues/local/etc/MniiGUI.cfg

  1. #{{ifdef _MGGAL_PCXVFB
  2. [pc_xvfb]
  3. defaultmode=800x600-16bpp
  4. window_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)
  5. exec_file=/usr/local/bin/qvfb2 //qvfb路径
  6. #/usr/local/bin/qvfb2
  7. #}}

注意

  1. 整个开发过程使用的环境
  2. Ubuntu 10.04 LTS 32
  3. gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
  4. 如果使用其他版本将无法安装qt3qvfb
  5. 建议使用官方安装源

新塘ARM平台交叉编译minigui界面库的更多相关文章

  1. zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译

    前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...

  2. readline-6.3 之arm平台交叉编译

    近期须要弄个CLI命令接口程序,初步设想是须要支持历史命令翻阅,tab键命令补全这种一个东西.经查阅相关文档,深耕百度一番!(google近期不太正常) 实在恼火.发现readline果真是个好东西, ...

  3. 移植 libevent-2.0.22-stable 到ARM平台

    ARM 移植: 移植简单来讲就是使用ARM的编译环境,重新编译一份ARM平台上可以使用的库或执行文件,一般只需要重新制定C编译器和C++编译器即可. 特别注意的地方: 不能从windows解压文件后再 ...

  4. Qt在各平台上的搭建qt-everywhere(Qt for windows7-64bit, Ubuntu 12.04-32bit, 嵌入式x86平台, 嵌入式arm平台)

    下载地址:http://download.qt.io/ 当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,前面是*号的表示默认参数. +号表示该功能要求被评估,评估 ...

  5. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  6. C++100款开源界面库[转]

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  7. 移植mysql到嵌入式ARM平台

    移植MySQL到嵌入式ARM平台  MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.p ...

  8. C++ 100款开源界面库 (10)

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  9. 仿迅雷播放器教程 -- C++ 100款开源界面库 (10)

      (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系 ...

随机推荐

  1. ecshop 活动-》红包

    按商品发放:可以给指定某个商品发红包(购买付款,卖家发货后,会自动给买家发送红包:不是买家在付款的时候就自动可以减少红包金额) 按订单金额发放:订单满xx后(卖家发货后,会自动给买家发放红包)

  2. Lua与C的交互

    Lua 与 C 的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1.  ...

  3. JS网页顶部进度条demo

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. CDN技术

    CDN 是构建在数据网络上的一种分布式的内容分发网. CDN 的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避免单点失效带来的不良影 ...

  5. 推荐 10 个超棒的 CSS3 代码生成工具

    新的在线工具和 WebApp 帮助开发者快速地创建网站而不用写代码.前端开发已经在框架和代码库方面有了很大的进展. 但是许多开发者已经忘记了代码生成器在构建网站时的价值.下面的资源是完全免费的 Web ...

  6. regsvr32的使用

    注册器是: DllRegisterServer 命令就是: regsvr32 不是regsrv32.

  7. array_fill 用给定的值填充数组

    转自:http://www.phpstudy.net/php/165.html PHP array_fill 用给定的值填充数组 array_fill (PHP 4 >= 4.2.0, PHP ...

  8. openssh for windows安装

     openssh for windows安装 2009-11-22 22:43:58 分类: WINDOWS 本文转自:http://blog.chinaunix.net/uid-7541208-id ...

  9. [译]git status

    git status git status命令能展示工作目录和stage区的状态. 使用他你能看到那些修改被staged到了, 哪些没有, 哪些文件没有被Git tracked到. git statu ...

  10. 动态调用web服务

    通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...