minigui1.6.10移植

minigui-1.6.10移植到SEP4020EVB详解2009-04-21 21:21为了使用嵌入式浏览器edillo,需要minigui1.6.10的支持,OK,搞定minigui1.6.10

本文基本转载自FP学长的《minigui-1.3.3移植到SEP4020EVB详解》,见谅


在这里只讲怎样将minigui-1.6.10移植到开发板EVB-SEP4020上去,在pc上安装minigui-1.6.10不用讲,这里我用到的交叉编译器是arm-linux-gcc3.4.1
MiniGUI 的编译需要一些库文件,缺省我们的 gcc 基本上都有这些库文件,所以不需要安装,可是现在要交叉编译了,交叉编译器可是不带这些库文件的,所以我们得首先自己编译这些库文件装到交叉编译器中去。
注意一点:库不一定要装最新的,库版本太新,MiniGUI 有可能不认识,像jpeg 库和 ttf 库就是这样,太新了反而用不了,所以要注意版本,以下的库都是我验证过可以和MiniGUI一起工作的,其它版本的库没试过,不保证能正确通过:)文中没有下载地址的文件大都可以在https://www.360docs.net/doc/22680956.html,上下载。



(1)首先安装 zlib 库,这个是后面的库的编译基础。

https://www.360docs.net/doc/22680956.html,/zlib-1.2.3.tar.gz ,400多K,下载到目录/root/cross下

[root]# tar zxf zlib-1.2.3.tar.gz

由于 zlib 库的configure 脚本不支持交叉编译选项,只好自己动用了,手动临时把 gcc 修改成指向我们的交叉编译器 arm-linux-gcc

[root]# cd /usr/bin
[root]# mv gcc gcc_back
[root]# ln -s /usr/local/arm/3.4.1/bin/arm-linux-gcc ./gcc
[root]# mv ld ld_back
[root]# ln -s /usr/local/arm/3.4.1/bin/arm-linux-ld ./ld

OK ,修改完成后回到 /root/cross/zlib-1.2.3 目录下

[root]# ./configure --build=i686-pc-linux --target=arm-linux --host=arm-linux --prefix=/usr/local/arm/3.4.1/arm-linux --shared

注:这里似乎有问题,提示i686-pc-linux无法识别,直接
[root]#./configure --prefix=/usr/local/arm/3.4.1/arm-linux --shared 解决

注意:这里配置指向/usr/local/arm/3.4.1/arm-linux 目录,会自动安装在 /usr/local/arm/3.4.1/arm-linux / [include,lib] 目录下,千万不要装错目录了,不然后面会找不到这个库的

[root]# make
[root]# make install

若用gcc3.4.1是不会出现什么错误的,呵呵。

安装完后检查一下目录 /usr/local/arm/3.4.1/arm-linux / [include,lib] ,假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp –a libz.* /…./lib 就行,要用上 –a 选项
记着把刚才改过的 gcc 再改回去,不然后面会出错的!!!!!(一定记得改)
[root]# cd /usr/bin
[root]# mv gcc_back gcc
[root]# mv ld_back ld


(2)安装 png 库,这个是用来显示 png 图形的。

MiniGUI 里很多图都是 png 的,如果没有这个库,你的 MiniGUI 将无法正常工作,切记切记!
http://prdo

https://www.360docs.net/doc/22680956.html,/libpng/libpng-1.2.18.tar.bz2?download(png 库),这里我用的是https://www.360docs.net/doc/22680956.html,上打包的png库

还是那句话,库不要用最新的,最新的容易有问题,用这个老一点的就没问题了,呵

[root]# tar zxf libpng-1.2.18 .tar.gz
[root]# cd libpng-1.2.18
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux --prefix=/usr/local/arm/3.4.1/arm-linux

注意这边的配置:①使用交叉编译器②安装目录③—host 指定软将运行平台,不然终端也会提示说叫你使用—host 参数的。

注:上面提供的库我没用过,https://www.360docs.net/doc/22680956.html,上打包的png库不提供有效的configure脚本,所以只好自己动手改 Makefile 文件了

[root]# cp scripts/makefile.linux Makefile //把 Scripts 下的一个 makefile 拷出来自己动手改
[root]# vi Makefile // 自己动手改

CC=arm-linux-gcc //修改这里
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
prefix=/usr/local/arm/3.4.1/arm-linux //修改这里
# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/usr/local/arm/3.4.1/arm-linux/lib //修改这里
ZLIBINC=/usr/local/arm/3.4.1/arm-linux/include //修改这里

好了,保存,然后去编译吧

[root]# make
[root]# make install

安装完了,查看下/usr/local/arm/3.4.1/arm-linux/目录下的 lib 文件夹里是否有 libpng.a,libpng.so 等文件和 include 文件夹里是否有 png.h,pngconf.h 文件以及 libpng12 文件夹。



(3)第三步:安装 jpeg 库

在https://www.360docs.net/doc/22680956.html,/html/242232006010901.html(jpeg 库)下载到/root/cross/下面,同样,我用的是https://www.360docs.net/doc/22680956.html,上提供的库

[root]# tar zxf jpegsrc.v6b.tar.gz
[root]# cd /root/cross/jpeg-6b
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux prefix=/usr/local/arm/3.4.1/arm-linux --enable-shared

在 make 之前注意:从前面 libpng-1.2.18 的源码目录中把 libtool 拷贝过来,放在
/home/source/minigui/jpeg-6b目录下,否则会出现“make: ./libtool: command not found”错误。
另外要注意的是:不能使用系统的 libtool,因为这里要进行的是交叉编译。

注:这里我上网搜了搜,有人说去掉最后的编译选项--enable-shared就可以了,我一试,好像就可以了,而且不管是libpng-1.2.18还是我下的libpng,源码目录里都没有libtool

[root]# make
下面创建一个目录,否则 make install 的时候会报错。注:这里我不要这一步也没有报错。
[root]# mkdir -p /usr/local/arm/3.4.1/arm-linux/man/man1
[root]# make install

安装完了,查看下/usr/local/arm/3.4.1/arm-linux/目录下的 lib 文件夹里是否有 libjpeg.so,libjpeg.so.62.0.0 等文件和include 文件夹里是否有 jpeglib.h 文件。



(4)第四步:安

装 libttf 库,这个是 TrueType 字体的支持库,用来显示文字的。

https://www.360docs.net/doc/22680956.html,/sourceforge/freetype/freetype-1.3.1.tar.gz 下载到/root/cross/下面

注意:MiniGUI 的文档说只支持 1.3.1 版本的 ttf 库,不要把版本弄错了

这个库装起来最麻烦,全部自己手动编译,安装,下面一步一步来做吧

[root]# tar zxf freetype-1.3.1.tar.gz //老一套
[root]# cd freetype-1.3.1 //进到目录里去
[root]# mkdir –p /root/cross/libttf/extend // 自己另外建立一个目录
[root]# cp ./lib/* ./lib/arch/ansi/* /root/cross/libttf/ //把有用的东西拷出来
[root]# cp ./lib/extend/* /root/cross/libttf/extend/ //把 extend 目录下的文件也拷出来

注意 cp 命令不要用 –r 选项,因为会把一些没用的东西出拷出来的。
拷贝完成了,现在来自己手动编译了

[root]# cd libttf(就是上面新建的一个目录)
[root]# arm-linux-gcc -c -fPIC -O2 freetype.c //不要奇怪,对,我们只要编译这一个.c文件,因为它包括了其它所有的.c文件了,你可以自己查看它的内容
[root]# arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c 把 extend 下所有的 .c 文件全部编译
[root]# arm-linux-gcc --shared -o libttf.so *.o 生成最后的动态链接库,OK了

此时应该在libttf下会出现一个libttf.so库文件
现在手动安装,得自己建立一下目录

[root]# mkdir –p /usr/local/arm/3.4.1/arm-linux/include/freetype1/freetype
[root]# cp *.h extend/*.h /usr/local/arm/3.4.1/arm-linux/include/freetype1/freetype
[root]# cp libttf.so /usr/local/arm/3.4.1/arm-linux/lib

安装库完成,哈!



(5)第五步:编译安装 miniGUI 资源包 minigui-res-1.6.10

https://www.360docs.net/doc/22680956.html,/download/minigui-res-1.6.10.tar.gz (miniGUI资源包)下载到/root/cross/目录下

[root]# cd /root/cross/minigui-res-1.6.10
[root]# make install

默认安装到/usr/local/lib/minigui/res目录。 切记后面一定要将此处的资源包拷过去



(6)第六步:配置编译安装 miniGUI

https://www.360docs.net/doc/22680956.html,/download/libminigui-1.6.10.tar.gz (miniGUI库) 下载到/root/cross/目录下

MiniGUI 1.3.3 版本在链接 ljpeg lpng 时老是要链接 /usr/lib 下的库,没办法,只好用前面的方法,使用备份和软连接的方法。
[root]# cd /usr/lib
[root]# mv libjpeg.so libjpeg.so_back
[root]# mv libpng.so libpng.so_back
[root]# mv libttf.so libttf.so_back
[root]# ln –s /usr/local/arm/3.4.1/arm-linux/lib/libttf.so ./libttf.so
[root]# ln -s /usr/local/arm/3.4.1/arm-linux-gcc/lib/libpng.so libpng.so
[root]# ln -s /usr/local/arm/3.4.1/arm-linux-gcc/lib/libjpeg.so libjpeg.so
下面进行配置安装:
[root]# cd /root/cross/libminigui-1.3.3
由于我使用的是ubuntu8.04,所以在这不能使用图形化配置界面make menuconfig,因为这样在退出保存时会提示你无法保存,
在此不得不说用ub

untu开发搓!!!若用fedora8就没这些问题了
没办法只好用字符界面一个个的配置了
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux --disable-galqvfb --disable-
galecoslcd --disable-vbfsupport --disable-ttfsupport --disable-type1support --prefix=/usr/local/arm/3.4.1/arm-linux
配置之后,进行编译安装:
[root]# make // 需要一点时间,耐心等待
[root]# make install
安装完了,查看下/usr/local/arm/3.4.1/arm-linux/目录下的 lib 文件夹里是否有
libminigui.so, libmgext.so, libvcongui.so 等文件和 include 文件夹里是否有 minigui 文件夹 (内
有 minigui 相关的头文件)。
好了,现在不要忘记把前面刚刚备份的改回来:
[root]# cd /usr/lib
[root]# mv libjpeg.so_back libjpeg.so
[root]# mv libpng.so_back libpng.so
[root]# mv libttf.so_back libttf.so

注:minigui1.6.10似乎没有这些问题链接问题,直接
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --host=arm-linux --target=arm-linux --disable-galqvfb --disable-galecoslcd --disable-vbfsupport --disable-ttfsupport --disable-type1support --prefix=/usr/local/arm/3.4.1/arm-linux
[root]# make // 需要一点时间,耐心等待
[root]# make install

注意--disable-vbfsupport ,一定要注意这个选项,否则在开发板上运行示例程序时,提示找不到var bitmap font,实际上在开发板上的/usr/local/lib/minigui/res/font目录下没有var bitmap font字体库,至于如何支持它,没有深究。其他选项可通过./configure –h帮助查看,根据自己的开发板及项目需要控制相应的功能。

接着把上面编译的资源包/usr/local/lib/minigui/下的res目录拷到/usr/local/arm/3.4.1/arm-linux/lib/minigui/下!!!



(7)安装 popt 库,这个库在编译 mde 程序时需要使用,不然编译没法通过

http://gd.tuwien.ac.at/utils/https://www.360docs.net/doc/22680956.html,/dist/rpm-4.1.x/popt-1.7.tar.gz 我是从这里下载的,下载到/root/cross

[root]# tar zxf popt-1.7.tar.gz
[root]# cd popt-1.7
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux prefix=/usr/local/arm/3.4.1/arm-linux --enable-shared --enable-shared --enable-static

在此用ubuntu又编不过去,又报gettext的版本太低,叫我们去下载新的gettext,简直无法容忍了!!!
换到fedora8下一切顺利,再将其lib文件夹下的libpopt.a,https://www.360docs.net/doc/22680956.html,,libpopt.so.0.0.0和include文件夹下的popt.h考回到ubuntu下的/usr/local/arm/3.4.1/arm-linux/相应目录下

[root]# make
[root]# make install



(8)编译综合例子 mde-1.6.10

https://www.360docs.net/doc/22680956.html,/downloads/minigui13/mde-1.6.10.tar.gz(综合例子程序)下载到下载到/root/cross

[root]# cd /root/cross/mde-1.6.10
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux
[root]# make

一切很

顺利,搞定了。编到这步已经很不容易了,交叉编译环境设置好了!





(9)移植minigui到嵌入式文件系统中

前面是交叉编译的过程,现在把上面编的各种库都移到开发板的文件系统上去,/nfs下建立我的嵌入式系统的根目录,在这里我采用的nfs文件系统改起来比较方便,现在需要把 minigui 的库文件放到里面去,把/usr/local/arm/3.4.1/arm-linux/lib 中相应的库拷到 /nfs/lib 目录下去,下面是我拷的库文件:

libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so
https://www.360docs.net/doc/22680956.html, libmgext-1.3.so.3.0.0 https://www.360docs.net/doc/22680956.html, libpng.so.2.1.0.10rc1 libttf.so libz.so.1
libjpeg.so libmgext.a libminigui.so libpopt.a libvcongui-1.3.so.3 libz.so.1.2.3
libjpeg.so.62 https://www.360docs.net/doc/22680956.html, libm.so https://www.360docs.net/doc/22680956.html, libvcongui-1.3.so.3.0.0 minigui
libjpeg.so.62.0.0 libmgext.so libm.so.6 libpopt.so libvcongui.a shared
libm-2.2.3.so libminigui-1.3.so.3 libpng.a libpopt.so.0 https://www.360docs.net/doc/22680956.html,
libm.a libminigui-1.3.so.3.0.0 libpng.so libpopt.so.0.0.0 libvcongui.so

其中一些.a 的静态库是不需要拷过去的,另外要运行c程序还需要拷一些libc标准库进去,我图方便,直接将整个/usr/local/arm/3.4.1/arm-linux/lib考到/nfs下面,呵,懒人的做法。

OK,库文件准备完毕,下面把资源文件也拷过来,还记得吗,在前面 搭建 PC 环境中讲过安装资源文件,它被装在/usr/local/lib 目录下,一个叫 minigui 的目录,我们要做的就是把它拷过来,连目录一起拷过来,目录结构和主机一样,把配置文件也拷过来

[root]# cp –r –a /usr/local/lib/minigui /nfs/lib/minigui
[root]# cp /usr/local/arm/3.4.1/arm-linux/etc/MiniGUI.cfg /nfs/usr/local/etc/

记住,保持目录结构的一致,修改 MiniGUI.cfg ,如下

[system]
# GAL engine
gal_engine=fbcon //这里修改

# IAL engine
ial_engine=dummy // 这里修改,我用的是触摸屏,所以就用dummy肯定不会错

mdev=/dev/tp //解摸屏
mtype=none

[fbcon]
defaultmode=320x240-16bpp // 根据你的LCD大小自己设置,设置错误minigui 就启动不了

ial_engine 一开始建议用 dummy ,先让 minigui 跑起来,以后再把触摸屏加进去,保证尽可能减少错误的发生,再将/root/cross/mde-1.3.0/下的文件夹都拷贝(每一个文件夹都是一个综合实例)到 /nfs/demo/下面。保存,退出。 OK ,你的板子上的系统也搭建完毕了,现在来让真正的图形界面跑起来!
但这时触摸屏应该还没作用,下面就是改触摸屏的输入引擎部分了

 

(10)改写触摸屏的引擎
触摸屏的输入引擎文件在/root/cross/libminigui-1.3.3/src/ial/下面,自己可以写一个引擎文件然后将 MiniGUI.cfg 中的# IAL engine改为自己的引擎就行,在这我偷懒,直接改系统的dummy.c文件改动的地方不多,就wait_event函数和InitDummyInput函数两个

部分,改完后保存(dummy.c的修改详见另一篇博文)。

然后重新编译libminigui-1.3.3,步骤见上面的第五步,编译完,再将改动后的库文件再移到/nfs/lib下,其他部分不用动,重新上电,进入文件系统后(可以不用重新上电),运行mde目录下的例程
[root]#./same
在此就能看到我们熟悉的连连看的画面了,而且用手也能去点哦!!




相关文档
最新文档