MiniGUI+Tslib交叉编译终极教程

kidneybeans 2011-05-14

第一部分:minigui-1.3.3 移植到SEP4020EVB 详解

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

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

http://www.linuxidc.net/thread-2208-1-1.html 下载zlib-1.2.3.tar.gz ,400 多K ,下载到目录 /root/cross 下
[user]# 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 目录下
[user]#./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] 目录下,千万不要装错目录了,不然后面会找不到这个库的
[user]# 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://www.linuxidc.net/thread-2209-1-1.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 参数的。
#  make
#  make  install
安装完了,查看下/usr/local/arm/3.4.1/arm-linux/ 目录下的 lib 文件夹里是否有 libpng.a ,
libpng.so 等文件和 include 文件夹里是否有 png.h ,pngconf.h 文件以及 libpng12 文件夹。

(3 )第三步:安装 jpeg 库
http://www.linuxidc.net/thread-2210-1-1.html (jpeg 库)下载到/root/cross/ 下面
#  cd  /root/cross/jpeg-6b
#   ./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 ,因为这里要进行的是交叉编译。
#  make
下面创建一个目录,否则 make install 的时候会报错。
#  mkdir  -p  /usr/local/arm/3.4.1/arm-linux/man/man1
#  make  install
安装完了,查看下/usr/local/arm/3.4.1/arm-linux/ 目录下的 lib 文件夹里是否有 libjpeg.so ,
libjpeg.so.62.0.0 等文件和include 文件夹里是否有 jpeglib.h 文件。

(4 )第四步:安装 libttf 库,这个是 TrueType 字体的支持库,用来显示文字的。

http://www.linuxidc.net/thread-2211-1-1.html 下载 freetype-1.3.1.tar.gz 下载到/root/cross/ 下面

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

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

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

注意 cp 命令不要用 –r 选项,因为会把一些没用的东西出拷出来的

拷贝完成了,现在来自己手动编译了

[user]# cd libttf( 就是上面新建的一个目录 )
[user]# arm-linux-gcc -c -fPIC -O2 freetype.c // 不要奇怪,对,我们只要编译这一个 .c 文件,因为它包括了其它所有的 .c 文件了,你可以自己查看它的内容
[user]# arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c 把 extend 下所有的 .c 文件全部编译
[user]# 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.3.3
minigui-res-1.3.3.tar.gz 到http://www.linuxidc.net/thread-2212-1-1.html下载    (miniGUI 资源包)下载到/root/cross/ 目录下
#  cd /root/cross/minigui-res-1.3.3
#  make install
   默认安装到/usr/local/lib/minigui/res 目录。 切记后面一定要将此处的资源包拷过去

(6 )第六步:配置编译安装 miniGUI
libminigui-1.3.3.tar.gz  到 http://www.linuxidc.net/thread-2213-1-1.html 下载  (miniGUI 库)   下载到/root/cross/ 目录下
MiniGUI 1.3.3   版本在链接 ljpeg lpng 时老是要链接 /usr/lib   下的库,没办法,只好用
前面的方法,使用备份和软连接的方法。
# cd /usr/lib    
# mv libjpeg.so   libjpeg.so_back  
# mv libpng.so   libpng.so_back
# mv libttf.so      libttf.so_back
# ln -s /usr/local/arm/3.4.1/arm-linux/lib/libttf.so ./libttf.so
# ln -s  /usr/local/arm/3.4.1/arm-linux-gcc/lib/libpng.so  libpng.so
# ln -s  /usr/local/arm/3.4.1/arm-linux-gcc/lib/libjpeg.so  libjpeg.so
下面进行配置安装:
# cd /root/cross/libminigui-1.3.3
由于我使用的是Ubuntu8.04 ,所以在这不能使用图形化配置界面make menuconfig ,因为这样在退出保存时会提示你无法保存,
在此不得不说用ubuntu 开发搓!!!若用Fedora8 就没这些问题了
没办法只好用字符界面一个个的配置了
#./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

若是在fedora 下开发可用make menuconfig, 具体配置如图:

在 GAL  engine Options 里  

(NEWGAL) GAL and its engines    

[*]      NEWGAL engine on Linux FrameBuffer console    

[ ]      NEWGAL engine on Qt Virtual FrameBuffer     

[ ]      NEWGAL engine on eCos LCD interface    

[*]   Dummy NEWGAL engine  

[*] Have console on Linux FrameBuffer    

 

在 Font Option  里   

[*] Raw bitmap font    

[ ] Var bitmap font            //  这个选项去掉,否则,编译时老出错

[*] Incore font sansserif    

[*] Incore font courier    

[*] Incore font symbol    

[*] Incore font vgas    

[*] Qt Prerendered Font    

[ ] TrueType font        //  如果需要对这个字体支持 , 需要下载编译安装 freetype 库

[ ] Adobe Type1 font          //  如果需要对这个字体支持 , 需要下载编译安装 freetype 库

NOTE :上面两个需要编译安装的字体库,在 miniGUI 官网上有的下。

 

在 Image Options  里  

[*] Includes SaveBitmap-related functions  

[ ] PCX file support    

[ ] LBM/PBM file support    

[ ] TGA file support    

[*] GIF file support    

[*] JPG file support      //  前面我们已经编译安装了 JPG 库,所以这里我们可以选择此项

[*] PNG file support    //  前面我们已经编译安装了 PNG 库, 所以这里我们可以选择此项

 

在 Development Environment Option  里 

(Linux) Platform  

(arm-linux-gcc) Compiler    

(glibc) Libc             

--- Installation options    

Path prefix: "/usr/local/arm/3.3.2/arm-linux"  //  这里, 我们把库装到交叉编译器的目录下  

--- Additonal Compiler Flags     

     CFLAGS: ""  

     LDFLAGS: ""  

其他的选项暂时不做改变,使用默认的配置即可

配置之后,进行编译安装:
# make       //   需要一点时间,耐心等待
# make  install
安装完了,查看下/usr/local/arm/3.4.1/arm-linux/ 目录下的 lib 文件夹里是否有
libminigui.so , libmgext.so , libvcongui.so 等文件和 include 文件夹里是否有 minigui 文件夹 (内
有 minigui 相关的头文件)。

好了,现在不要忘记把前面刚刚备份的改回来:
# cd /usr/lib    
# mv libjpeg.so_back   libjpeg.so  
# mv libpng.so_back   libpng.so
# mv libttf.so_back   libttf.so

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

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

popt-1.7.tar.gz 下载到这里 http://www.linuxidc.net/thread-2214-1-1.html ,下载到 /root/cross

[user]# tar zxf popt-1.7.tar.gz
[user]# cd popt-1.7
[user]# ./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 , libpopt.la , libpopt.so.0.0.0 和 include 文件夹下的 popt.h 考回到 ubuntu 下的 /usr/local/arm/3.4.1/arm-linux/ 相应目录下

[user]# make
[Root]# make install

( 8 )编译综合例子 mde-1.3.0
mde-1.3.0.tar.gz 下载在http://www.linuxidc.net/thread-2215-1-1.html。(综合例子程序)下载到 /root/cross

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

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

( 9 )移植 minigui 到嵌入式文件系统中
前面是交叉编译的过程,现在把上面编的各种库都移到开发板的文件系统上去
我在 /home/fp/nfs 下建立我的嵌入式系统的根目录,在这里我采用的网络文件系统改起来比较方便,现在我需要把 minigui 的库文件放到里面去,


●库文件
把 /usr/local/arm/3.4.1/arm-linux/lib 中相应的库拷到 /home/fp/nfs/lib 目录下去
下面是我拷的库文件:

libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so
libjpeg.la libmgext-1.3.so.3.0.0 libminigui.la 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 libmgext.la libm.so libpopt.la 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 libvcongui.la
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 考到 /home/fp/nfs 下面,呵,懒人的做法

OK ,库文件准备完毕


●资源文件
下面把资源文件也拷过来,还记得吗,在前面 搭建 PC 环境中讲过安装资源文件,它被装在了 /usr/local/lib 目录下,一个叫 minigui 的目录,我们要做的就是把它拷过来

[Root]# cp –r –a /usr/local/lib/minigui /home/fp/nfs/lib/minigui 连目录一起拷过来,目录结构和主机一样

 

●配置文件
把配置文件也拷过来

[Root]# cp /usr/local/arm/3.4.1/arm-linux/etc/MiniGUI.cfg /home/fp/nfs/usr/local/etc/ 记住,保持目录结构的一致

修改 MiniGUI.cfg ,如下

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

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

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

还有一点就是要将文件中的所有 /usr/local/ 替换为 /

ial_engine 一开始建议用 dummy ,先让 minigui 跑起来,以后再把 触摸屏 加进去,保证尽可能减少错误的发生

再将 /root/cross/mde-1.3.0/ 下的文件夹都拷贝(每一个文件夹都是一个综合实例)到 /home/fp/nfs/demo/ 下面

保存,退出。 OK ,你的板子上的系统也搭建完毕了,现在来让真正的图形界面跑起来!

相关推荐

GoatSucker / 0评论 2019-12-22

技术老炮儿 / 0评论 2011-10-29