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/