MiniGUI的移植

  • 格式:doc
  • 大小:355.00 KB
  • 文档页数:7

在AT91SAM9261EK上移植MiniGUI

当前流行的图形用户界面有MiniGUI、ucGUI、QT/Embedded等,ucGUI需要付费才能使用,QT/Embedded占用资源多,内存消耗大。MiniGUI是遵循GPL条款发布的自由软件,目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统,与其他GUI比,MiniGUI的特点是轻型、占用资源少。

交叉编译工具: arm-linux-gcc-4.3.2

宿主机: fedora7 ——linux

Linux kernel: 2.6.21

开发平台: AT91SAM9261EK

一、准备相关资源

Libminigui-1.6.10.tar.gz MiniGUI函数库源代码

Miniguires-1.6.10.tar.gz MiniGUI所使用的资源,包括基本字体、图标、位图等。

Mg-samples-str-1.6.10.tar.gz MiniGUI的演示程序。

Mde-1.6.10.tar.gz MiniGUI 图像界面应用程序

二、建立相关目录、解压缩文件

⑴ mkdir /mtemp/minigui 存放源文件

⑵ 展开各个文件:

tar –xvzf libminigui-1.6.10.tar.gz

tar –xvzf miniguires-1.6.10.tar.gz

tar –xvzf mg-samples-str-1.6.10.tar.gz

tar –xvzf mde-1.6.10.tar.gz

在/mtemp/minigui/下面会生成四个对应的文件。

三、交叉编译MiniGUi

在宿主机上建立/usr/local/minigui用于存放编译安装生成的库文件

⑴ libminigui的编译安装

cd libminigui-1.6.10

运行配置脚本文件:

./configure –prefix=/usr/local/minigui –build=i386-linux –target=arm-linux –host=arm-linux

执行完后生成Makefile文件,然后依次执行make make install命令,如果没有错误出现,那么成功,MiniGUI的函数库和头文件以及配置文件等资源被安装在/usr/local/minigui下面。

函数库: /usr/local/minigui/lib

头文件: /usr/local/minigui/include

配置文件:/usr/local/minigui/etc

手册: /usr/local/minigui/man

安装后如下图所示:

⑵ MiniGUI-res的编译安装

cd minigui-res-1.6.10

首先要对config.linux文件做一些修改。指明编译路径:

保存后直接 make install,在指定的位置生成res文件夹

⑶ mg-samples的编译安装

cd mg-samples-1.6.10

./configure --build=i386-linux --prefix=/usr/local/minigui --host=arm-linux --target=arm-linux

LDFLAGS=-L/usr/local/minigui/lib CFLAGS=-I/usr/local/minigui/include

配置后,直接make即可,若干秒后编译完成,在res文件夹下面会生成一些例子和执行程序,如下所示:

至此,完成演示程序的编译。

在以上的编译过程中出现了如下两个错误,感觉很纳闷,对此太不熟悉了。

首先看第一个错误,在libminigui-1.6.10 make时出现如下错误

ial.c:309: error: 'InitRm9200Input' undeclared here (not in a function)

ial.c:309: error: 'TermRm9200Input' undeclared here (not in a function)

参照论坛中的意见,在ial.c里面加入extern 声明上面的两个函数,原因是这两个函数的原型在dummy.c里面,但是ial.c却不知道,理论上也应该在dummy.h中添加上述两个函数的声明。我没有添加。编译通过了。按道理这样的情况一般不会出现,可能是在第一步配置的时候漏掉了什么。我查看dummy.c文件,没有发现上面两个函数的原型。

第二个错误:在编译mg-samples-str的时候出现错误,如下:

/usr/local/minigui/lib/libminigui.so: undefined reference to `InitRm9200Input'

/usr/local/minigui/lib/libminigui.so: undefined reference to `TermRm9200Input'

解决这个问题颇费了周折,网上搜了一大圈圈也米有找到相关的办法,一时陷入了泥潭。偶尔想起来了,在编译libminigui之前曾对他进行配置过,就是通过 vim configure打开的文件,将里面11201行的 build_fxrm9200_ial_engine=”no” 改为”yes”,不能确定,于是将其改回去,重新编译了libminigui,安装,没有出现第一个错误。再继续编译mg-samples,也没有第二个错误产生了。当时很兴奋,但是依然不明就里,很郁闷。先整起再说吧。

四、拷贝MiniGUI的资源到开发板中 在运行测试例子的时候需要动态链接一些库文件,因此必须将一些库文件拷贝到nfs目录下的相应文件夹中。

⑴ libminigui 安装库中的文件。我是将整个lib下面的文件全部拷贝过去的,注意cp参数

cp –rfd /usr/local/minigui/lib/* /home/radionfs/lib/

⑵ MiniGUI的 res资源,刚开始是复制到lib下,运行时不能加载,后面会讲到。

cp –rfd /usr/local/minigui/usr/local/lib/minigui/* /home/radionfs//usr/local/lib/minigui/

⑶ 最后将配置文件MiniGUi.cfg拷贝过去

cp /usr/local/minigui/etc/MiniGUI.cfg /home/radionfs/usr/local/etc/

拷贝过去后用vim打开,修改部分内容以适应我们的开发板如下:

这样我们执行MiniGUI的时候,就是在Console下的Framebuffer上执行。

五、拷贝例子演示MiniGUI

将mg-samples-1.6.10/src/下的显示程序放到nfs下的testapp目录下。用nfs启动开发板,在超级终端中执行例子程序。

六、补充安装资源

由于我是参照《在SAM9261上使用MiniGUI》和网上的部分资料,因此在执行程序的时候,提示找不到一些库文件,主要是没有安装libpng 库和libjpeg库。

png库,这个用来显示png图形的,MiniGUI里很多图都是png的,如果没有它,程序不能正确运行。

Jpeg库的作用和png库类似。

⑴ 安装png库

在安装png之前要先安装zlib-1.2.3.tar.gz资源。它的作用主要是支持jpeg库和png库。他的include 和lib我安装在了宿主机的/usr/local/arm/4.3.2/arm-linux 目录里面,关于他的安装可以参考《制作jffs2格式的文件系统》一文。

由于我们安装的是MiniGUi-1.6.10版本,在执行演示例子的时候提示的是: loading shared libraries: libpng.so.3: cannot open shared object file: No such file or directory

因此与他匹配的libpng库是libpng-1.2.34.tar.gz(也可能其他版本也可以匹配),版本太高或者太低都不成,之前我分别安装了libpng-1.0.10rc1.tar.gz和libpng-1.5.0.tar.gz都不行。

cp /mnt/hgfs/work/libpng-1.2.34.tar.gz /mtemp/minigui/

tar –xvzf libpng-1.2.34.tar.gz

cd libpng-1.2.34

libpng不提供有效的configure脚本,只能亲自修改Makefile文件了。在/libpng-1.2.34/scripts/下面有一些makefile文件,我将makefile.linux拷贝到了上级目录libpng-1.2.34中,修改如下:

主要修改的是工具链、安装路径、zlib库的位置等。保存、退出

make

make install

这样,就在指定目录中安装了png的库文件。

将lib下的全部文件拷贝到nfs的lib中,

cp –rfd /usr/local/minigui/libpng/lib/* /home/radionfs/lib/

有一些文件可能是不需要的,等后面熟悉了再删掉吧(为了系统的精简)

貌似include下的也要拷贝过去,不过我没有做这一步。

⑵ 编译安装jpeg库

本来以为安装了png库就万事大吉了,没想到运行例子程序又提示下面的错误: loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory

再继续抓狂的编译、安装吧。

jpegsrc.v6b.tar.gz

tar xzf jpegsrc.v6b.tar.gz

cd jpeg-6b

配置如下:

./configure –prefix=/usr/local/minigui/libjpeg/ --host=arm-linux-gcc \

--enable-shared –enable-static

必须编译成ARM版本的libjpeg才能在开发板上调用相关的库,因此需要修改自动生成的Makefile文件中的一些内容:

# The name of your C compiler:

CC= arm-linux-gcc

AR= arm-linux-ar

AR2=arm-linux-ranlib

make

在安装之前,必须在/usr/local/minigui/libjpeg/下面手动建立include lib bin

man/man1文件夹,否则安装的时候会报错,当初就是报一个错误,建立一个文件夹。

make install

这样就安装起了。

将编译好的库文件拷贝到nfs目录下的lib中

cp

–rfd /usr/local/minigui/libjpeg/lib/* /home/radionfs/lib/