minigui3.0.12之初体验-移植篇

时间:2022-12-07 06:34:03

前言

在一年多年前有幸接触使用到minigui一段时间,当时使用的应该是1.6版本,硬件平台使用的是s3c2440+64M内存,界面上做了很多功能,但整体运行还是十分流畅,我想要是换成QT在上面跑流畅度应该是比不上minigui的了;前段时间从朋友那拿到一块基于新塘nuc972的板子用来玩玩学习下,nuc972也是一颗基于arm926内核的soc,我想让人喜欢它的地方应该要是它内置了64M的DDR和LQFP的封装吧,硬件配置总体上和s3c2440相当,然后还配了一块800x480的七寸屏,我想用它来跑跑minigui应该会比较合适,也正好看看minigui3.0x更新的新特性。

备料

  1. 准备编译环境和交叉编译器,最好能用它编译一个最简单打印一句“hello world!”的小程序在板子上正常跑起来确保整个编译环境的正确;
  2. 下载minigui源码,它最基本的组成包括核心库MiniGUI Core Lib (V3.0.12 )和资源文件MiniGUI Resource (V3.0.12)这些多可以从minigui官方网站上下载到,另我这边这个两个文件是从nuc972的bsp包里得到的,它和从官网上下载的唯一区别是,它里面移植好了使用了nuc972的2D硬件加速功能的图像引擎,也就是说可以配置使用nuc972的硬件2D图像加速功能,貌似也只使用到了里面的BitBlt功能,画线这些基本操作还是由minigui来实现的,然而后面当我启用这个功能的时候屏幕颜色显示不对,还没去深究就先使用通用的FrameBuffer图像引擎了。
  3. 有了跑minigui的核心资源了,那再跑个demo看看吧,这里选择官网提供的iPhoneLikeDemo 后面发现运行它还需要用到jpeg和png库,这个两个也多可以在官网的下载界面的Tools and Dep. Libraries项里找到。

编译

一、核心库的编译

  1. 使用tar命令解压libminigui-gpl-3.0.12.tar.gz并cd进入;
  2. 使用configure脚本来配置minigui特性,这里执行如下命令:
    ./configure --prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux --build=i386-linux --with-osname=linux --with-targetname=fbcon
    --disable-pcxvfb --enable-videonuc970 --enable-videofbcon --enable-autoial --disable-vbfsupport
    --disable-screensaver --enable-tslibial --enable-procs

    其中--enable-videonuc970表示加入nuc92的硬件图形引擎支持,之后可在配置文件中选择使用;--enable-tslibial表示支持tslib作为IAL输入引擎;--enable-procs表示使minigui运行在procs模式,关于minigui的三种运行模式可参考官方文档;
  3. 配置成功后,执行make命令,等待编译完成无误后再执行make install命令即可由--prefix=xxx指定的路径下发现minigui的安装文件,把它们拷贝到rootfs对于的目录下即可。
  4. 修改etc目录下的MiniGUI.cfg配置文件,首先我们要修改指定我们使用的图像引擎为fbcon然后将其分辨率信息设置我们板子对应的分辨率如下:
    # GAL engine and default options
    gal_engine=fbcon
    defaultmode=800x480-16bpp

    第二个需要配置的为输入引擎IAL这里我们使用tslib作为我们的输入引擎即如下:
    # IAL engine
    ial_engine=tslib
    mdev=/dev/input/event0
    mtype=IMPS2

    还有要修改的地方就是配置正确的资源文件路径,如光标图片资源等,如下:
    [cursorinfo]
    #Edit following line to specify cursor files path
    cursorpath=/share/minigui/res/cursor/

    [resinfo]
    respath=/share/minigui/res/

Tips:
1. 在官方下载的源码中将不支持--enable-videonuc970选项可去掉;
2. 可通过命令./configure --help来查看支持的所有选项和含义。
3. 实际上如果我要跑官网上的demo的话还要打开对png图片的支持,配置时这项默认是关闭的,可加入参数--enable-pngsupport但实际上我发现即使添加上这个也是还没打开对png图片的支持,这一点可以通过打开mgconfig.h文件来确认配置是否生效,如果没有可手工将里面对于的宏打开即可,如png图片支持对于的宏为#define _MGIMAGE_PNG 1

二、编译资源文件

资源文件的编译相对简单,里面主要是包含一些图片资源等,如光标样式,使用tar命令解压minigui-res-be-3.0.12.tar.gz并cd进入,然后使用configure脚本配置安装路径执行如下命令:
./configure --prefix=$PWD/../build
然后执行make和make install即可,相关资源就会被安装到了上级目录的build目录下,既对应着在rootfs下的相应目录。

三、编译依赖的库文件

1、jpeg库的编译

  1. 同样使用configure脚本配置编译,执行命令如下:
    ./configure --prefix=$PWD/build CC=arm-linux-gcc --host=arm-linux --build=i386-linux --enable-shared --enable-static
    其中--enable-shared是为了配置生成.so即共享库
  2. 然后执行make和make install命令后即可在当前目录下的build/lib下找到我们需要的文件了。

Tips:
1、步骤1的配置命令通常适用于大多数使用Autoconf/Automake来生成的工程;
2、注意使用和minigui核心库匹配的jpeg库版本,如果不确定通常程序运行时它会发出错误说找不到对应版本的库文件;
3、以上配置编译命令适用于较新的jpeg库如在jpeg-7上配置编译是通过的,然而在配置编译配置jpeg-6b时却发生了错提示如下:
make: ./libtool: Command not found
原来较老的jpeg库没有自带libtool,这里要先下载交叉编译libtool-2.2.4配置命令如下:
./configure --prefix=$PWD/build CC=arm-linux-gcc --host=arm-linux --build=i386-linux
然后make & make install即可;
4、编译好libtool后将build/bin目录下的libtool脚本拷贝至jpeg-6b的目录下,然后先要手动创建好接下来要安装的目录命令如下:
mkdir -p build/bin build/include build/lib build/man/man1
之后再执行make & make install命令即可在build/lib目录下找到我们需要的共享库了。

2、png库的编译

编译配置方法同编译jpeg库,无特别注意事项。

三、编译iphone-like-demo

  1. 它同样是使用Autoconf/Automake来配置的工程,所以我们解压它并cd进入使用如下命令来配置它
    ./configure --prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux --build=i386-linux CFLAGS=-I$PWD/../build/include
    LDFLAGS="-L$PWD/../build/lib" LIBS="-lminigui_procs -lts -ljpeg -lpng -lz -ldl -lm -lpthread"

    其中CFLAGS参数指定了minigui的头文件路径,LDFLAGS指定了要链接的动态链接库路径,LIBS指定了要链接的动态链接库,尽管我们这样指定了minigui的头文件路径但是编译过程中它还是有提示报错说找不到相应的minigui的头文件路径,这时我们为了简单只需将minigui的头文件手动的拷贝到其-I指定的路径下即可,这里我们将minigui的头文件拷贝到编译的当前路径下即可;
  2. 编译中会遇到很多报错,我们只需依次解决下即可,如
    eblistview.c:(.text+0x40): undefined reference to `rindex'
    我们打开eblistview.c这个文件在文件头部添加如下代码
    #define rindex strrchr
    即用strrchr这个接口来代替rindex这个接口;
  3. 一般来说不会有其他很严重的报错,我们多可以依次解决,直到make完成,然后make install后即可在上层build目录下的bin文件夹下生成我们的执行程序;
  4. 然后将build目录下的lib文件夹下的库文件拷贝至板子上的lib文件夹下,之后想办法将bin文件夹的东西拷贝至板子上或通过网线挂载的方式,进入执行./mginit即可。

四、运行效果

由于整个程序进入子程序后没办法返回,我对其做下了修改,点击子程序的左上角作为退出的功能,并替换了一张背景图片,整个演示视频链接如下:
minigui3.0.12官方demo在NUC972上的运行效果iphone-like-demo
http://v.youku.com/v_show/id_XMTgwOTg0NzcyOA==.html
需要编译好的二进制文件的同学可到如下百度网盘路径下载解压出来放到rootfs下即可:
http://pan.baidu.com/s/1boYFc8f