MiniGUI-1.6.10在S3C2440上的移植

来源:互联网 发布:rhino犀牛软件 编辑:程序博客网 时间:2024/06/03 20:22

MiniGUI-1.6.10在S3C2440上的移植

一、编译前准备

1、硬件环境

1x86系列PC

2)带有S3C2440核心板的开发板

3)液晶显示器,VGA接口线,串口和USB线,网线

2.软件环境

1)主机操作系统

VMware虚拟机下的ubuntu10.10

2)开发板操作系统

嵌入式Linux,内核版本为2.6.37

3)交叉编译器

arm-linux-gcc-3.4.1

安装位置:/home/bhj/tools/(安装目录可任选,注意与上下文保持一致)。

3.相关说明

1)命令

所有以#开头的均为在shell中执行的命令。

2)交叉编译器位置

交叉编译器的安装位置为/home/bhj/tools/,进行交叉

编译产生的库都安装在/home/bhj/tools/arm/3.4.1/arm-linux/lib/目录下,可以根据你的交叉编译器的实际位置进行更改。

3)工作目录

默认的工作目录为/root/minigui/,绝大多数操作都在此目录下进行。

4.下载MiniGUI图形库源码(已提供)

开发库目录MiniGUI-1.6.10,目录中包含games-1.6.10.tar.gzmde-1.6.10.tar.gzminigui-res-1.6.10.tar.gzlibminigui-1.6.10.tar.gzmg-samples-1.6.10.tar.gz,共5个库。

1libminigui-1.6.10中包含3个库:

libminigui是提供窗口管理和图形接口的核心函数库,也提供了大量的标准控件;

libmgext libminigui的一个扩展库,提供了一些高级控件以及“文件打开”、“颜色选择”对话框等;

libvcongui 则为Linux操作系统提供了一个应用程序可用的虚拟控制台窗口,从而可以方便地在MiniGUI环境中运行字符界面的应用程序。

2)资源文件minigui-res-1.6.10.tar.gz

MiniGUI所使用的资源,包括基本字体、图标、位图和鼠标光标。

3)示例程序mg-samples-str-1.6.10.tar.gz

MiniGUI编程指南》的配套示例程序。

4)综合演示程序mde-1.6.10.tar.gz

MiniGUI的综合演示程序包,其中包含有一些较为复杂的示例程序。

5.下载所依赖函数库源码(已提供)

1zlib

zlib-1.2.3.tar.gz,这是编译后面的库的基础。

2png

libpng-1.0.10rc1.tar.gz

3jpeg

jpegsrc.v6b.tar.gzjpeg图片支持库。

4ttf

freetype-1.3.1.tar.gzTrueType字体的支持库。

5popt

popt-1.7.tar.gz,编译mde需要。

6.下载上位机仿真程序(已提供)

Qt虚拟缓冲帧qvfb-1.1.tar.gz.rar,上位机仿真需要。

7.复制根文件系统

复制开发板上自带的根文件系统root_qtopia.tar.gz到虚拟机中,并把yaffs映像制作工具mkyaffs2image复制到/bin/目录下。

8.解压源码包

1)建立工作目录并复制源码包

#mkdir /root/minigui

(创建工作目录,绝大部分相关的操作抖将在此目录下进行)

#mkdir /root/minigui/source

(创建source目录,所有的源码包都放在此目录)

#cp……… /root/minigui/source

(把所有下载的源码包(qvfb-1.1.tar.gz.rar, MiniGUI-1.6.10.rar, MiniGUI-1.6.10依赖库.rar)复制到此目录)

#mkdir /root/minigui/arm

(创建arm目录,所有进行交叉编译所需的源码都放在此目录)

#mkdir /root/minigui/x86(如不需仿真,可不做)

(创建x86目录,所有进行仿真所需的源码都放在此目录)

2)解压上位机仿真所需源码(如不需仿真,可不做)

#cd /root/minigui/source/MiniGUI-1.6.10

(进入开发库源码包所在目录)

#tar zxvf libminigui-1.6.10.tar.gz -C ../../x86

(解压MiniGUI图形库源码到x86目录,-C选项的含义是更改解压缩目录)

#tar zxvf minigui-res-1.6.10.tar.gz -C ../x86

(解压MiniGUI资源文件到x86目录)

#tar zxvf mg-samples-1.6.10.tar.gz -C ../../x86

(解压MiniGUI示例源码到x86目录)

#tar zxvf mde-1.6.10.tar.gz –C ../../x86

(解压MiniGUI综合演示源码到x86目录)

#tar zxvf qvfb-1.1.tar.gz –C ../../x86

(解压qvfb源码到x86目录)

3)解压交叉编译所需源码

#cd/root/minigui/source/MiniGUI-1.6.10

(进入开发库源码包所在目录)

#ta zxvf libminigui-1.6.10.tar.gz –C ../../arm

(解压MiniGUI图形库源码到arm目录)

#tar zxvf minigui-res-1.6.10.tar.gz –C ../../arm

(解压MiniGUI资源文件到arm目录)

#tar zxvf mg-samples-1.6.10.tar.gz –C ../../arm

(解压MiniGUI示例源码到arm目录)

#tar zxvf mde-1.6.10.tar.gz –C ../../arm

(解压MiniGUI综合演示源码到arm目录)

#cd /root/minigui/source/MiniGUI-1.6.10依赖库

(进入依赖库源码包所在目录)

#tar zxvf zlib-1.2.3.tar.gz –C ../../arm

(解压zlib源码到arm目录)

#tar zxvf libpng-1.0.10rc1.tar.gz –C ../../arm

(解压png源码到arm目录)

#tar zxvf jpegsrc.v6b.tar.gz –C ../../arm

(解压jpeg源码到arm目录)

#tar zxvf popt-1.7.tar.gz –C ../../arm

(解压popt源码到arm目录)

4)解压根文件系统

#tar zxvf root_qtopia.tar.gz -C ../../arm

(解压根文件系统root_qtopiaarm目录)

二、建立仿真开发环境

1.安装minigui-res-1.6.10

#cd /root/minigui/x86/minigui-res-1.6.10

#make install

这样MiniGUI运行时所需的资源文件就被安装到/usr/local/lib/minigui/res/目录下。

2.编译libminigui-1.6.10

#cd /root/minigui/x86/libminigui-1.6.10

#./configure

#make

#make install

库文件被安装到系统中。

3.编译mg-samples-1.6.10

#cd /root/minigui/x86/mg-samples-1.6.10

#./configure

#make

src目录下可以看到生成的可执行程序。

4.编译mde-1.6.10(此步未编译通过)

#cd /root/minigui/x86/mde-1.6.10

#./configure

#make

(先会提示vcongui.c文件中找不到popt.h,然后我找到popt.h,将它放到tools/目录下,再make,会出现这个错误:gcc -g -O2 -Wall -Wstrict-prototypes -pipe -D_REENTRANT -o vcongui vcongui.o -lvcongui -lmgext -lpopt -lpthread -lminigui -lm

/usr/bin/ld: cannot find -lpopt,原因是没有提供popt的仿真库)

如果编译成功的话,在各个子目录里可以看到相应的可执行演示程序。

5.编译qvfb-1.1(如不需仿真,可不做)

#cd /root/minigui/x86/qvfb-1.1

#./configure

(如果此处出现:

错误: Can't find X includes. Please check your installation and add the correct paths!

原因:没有X的包含文件

解决:sudo aptitude install libx11-dev xorg-dev

其余错误见:http://wenku.baidu.com/view/0e839c681eb91a37f1115cc3.html

#make

qvfb子目录下可以看到可执行的qvfb程序,复制到系统目录即可运行。如果在先前按照mini2440的用户手册搭建过Qt/Embedded开发环境,可能无法编译成功,主要是因为修改了/etc/ld.so.config文件。最简单的方法就是把搭建Qt/Embedded开发环境时生成的qvfb复制到/bin目录,直接就可以运行。“编译qvfb-1.1”这一步就可以省略掉了。

6.在上位机上仿真MiniGUI应用程序(如不需仿真,可不做)

#qvfb–width640–height480&

(由于前面把qvfb复制到了/bin目录,所以可以直接运行。后面的参数制定了qvfb的显示尺寸,因为在MiniGUI.cfgqvfb的尺寸默认为640*480,所以如果不指定这个值会无法运行,&选项指名这个程序在后台执行)

#cd /root/minigui/x86/mg-samples-1.6.10/src

#./helloworld

如果一切顺利的话现在就可以在qvfb上面看到MiniGUI

的界面了。还有mde子目录里面的程序,也可以直接执行。

三、交叉编译图形库

1.编译zlib

由于zlib库的configure脚本不支持交叉编译选项,所以我们只好使用符号链接把gcc指向我们的交叉编译器arm-linux-gcc,在编译完后再改回来即可。

1)把gcc指向我们的交叉编译器arm-linux-gcc

#cd usr/bin

#mv gcc gcc_bak

(备份gcc

#ln -s /home/bhj/tools/arm/3.4.1/bin/arm-linux-gcc ./gcc

(创建gccarm-linux-gcc的符号连接)

#mv ld ld_bak

(备份ld

#ln -s /home/bhj/tools/arm/3.4.1/bin/arm-linux-ld ./ld

(创建ldarm-linux-ld的符号连接)

2)交叉编译zlib

#cd /root/minigui/arm/zlib-1.2.3

#./configure --prefix=/home/bhj/tools/arm/3.4.1/arm-linux/ --shared

prefix选项把zlib库安装在/home/bhj/tools/arm/3.4.1/arm-linux/

shared说明生成共享库)

#make

#make install

3)改回gcc

#cd /usr/bin

#rm gcc

(删除gccarm-linux-gcc的符号连接)

#mv gcc_bak gcc

(还原gcc

#rm ld

(删除ldarm-linux-ld的符号连接)

#mv ld_bak ld

(还原ld

2.编译png

这个是用来显示png图形的,MiniGUI里很多图都是png的,如果没有这个库,你的MiniGUI将无法正常工作。由于libpng不提供有效的configure脚本,所以只好自己动手改写Makefile文件了。

1)改写Makefile

#cd /root/minigui/arm/libpng-1.0.10rc1

#cp scripts/makefile.linux Makefile

(把scripts目录下的一个Makefile拷出来自己动手改)

#vi Makefile

(自己动手改Makefile)

CC=arm-linux-gcc

prefix=/home/bhj/tools/arm/3.4.1/arm-linux

ZLIBLIB=/home/bhj/tools/arm/3.4.1/arm-linux/lib

ZLIBINC=/home/bhj/tools/arm/3.4.1/arm-linux/include

(保存)

2)编译安装

# make

# make install

3.编译jpeg

由于jpeg库的configure文件设计的有问题,得先用gcc编译一个dummy.c的文件,然后才能后面编译,不然的话就会出现libtool找不到之类的错误。所以先本机编译,然后清

除后,最后交叉编译即可解决这个问题。

1)本机编译jpeg

#cd /root/minigui/arm/jpeg-6b

#./configure --enable-shared --enable-static

#make

#make clean

2)交叉编译jpeg

#./configure --prefix=/home/bhj/tools/arm/3.4.1/arm-linux/

CC=arm-linux-gcc --enable-shared --enable-static

#make

#mkdir –p /home/bhj/tools/arm/3.4.1/arm-linux/man/man1

(安装前需要在arm-linux下建个目录,不然安装会出错)

#make install

4.编译popt

#cd/root/minigui/arm/popt-1.7

#./configure \

--prefix=/home/bhj/tools/arm/3.4.1/arm-linux/ \

--host=arm-linux --enable-shared --enable-static

(此处如果报错:

checking for GNU xgettext... configure: error:

*** GNU gettext is required. The latest version

*** is always available from ftp://ftp.gnu.org/gnu/gettext/.

解决方法:

sudo apt-get install gettext ,安装后再重复此步)

#make

#make install

5.编译libttf

libttf 库是TrueType字体的支持库,当然可以支持也可以不支持,这个库只能全手动安装和编译,先建立一个目录来存放其有用的或者说是我们所用到的库的源文件。

1)复制源文件

#mkdir -p/root/minigui/arm/libttf/extend

#cd /root/minigui/arm/

#cp freetype-1.3.1/lib/* freetype-1.3.1/lib/arch/ansi/* /root/minigui/arm/libttf/

#cp freetype-1.3.1/lib/extend/* /root/minigui/arm/libttf/extend/

2)交叉编译

#cd /root/minigui/arm/libttf

#arm-linux-gcc –c –fPIC -O2 freetype.c

(这个freetype.c中包括了其它所有的.c文件)

#arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c

(把extend下所有的.c文件全部编译)

#arm-linux-gcc -shared -o libttf.so *.o

(生成最后的动态链接库)

#cp libttf.so /home/bhj/tools/arm/3.4.1/arm-linux/lib

6.编译libminigui

#cd/root/minigui/arm/libminigui-1.6.10

#./configure \

--prefix=/root/minigui/arm/target \

--host=arm-linux \

--target=arm-linux \

--build=i386-linux \

--with-osname=linux \

--with-style=classic \

--with-targetname=fbcon \

--enable-autoial \

--enable-rbf16 \

--disable-vbfsupport \

CC=arm-linux-gcc

#make

#make install

(这样就会把交叉编译好的库文件和头文件安装在/root/minigui/arm/target目录)

#cp /root/minigui/arm/target/lib/* /home/bhj/tools/arm/3.4.1/arm-linux/lib/

#cp -r /root/minigui/arm/target/include/* /home/bhj/tools/arm/3.4.1/arm-linux/include/

(把交叉编译好的库文件和头文件复制到交叉编译器中,便于使用)

7.编译mg-samples

1cd /root/minigui/arm/mg-samples-1.6.10/

修改configure.in30行,这一步有没有用说不清楚,改成下面的样子

AC_CHECK_HEADERS($prefix/include/minigui/common.h, have_libminigui=”no”, foo="bar")

2)修改configure配置文件,在文件的最前面加上交叉编译的工具

CC=arm-linux-gcc

CPP=arm-linux-cpp

LD=arm-linux-ld

AR=arm-linux-ar

RANLIB=arm-linux-ranlib

STRIP=arm-linux-strip

3)配置

#./configure --prefix=/root/minigui/arm/target/ \

--host=arm-linux \

--target=arm-linux

--prefix所指定的目录必须与编译libminigui时所指定的目录一致)

4)修改src/Makefile

CC = arm-linux-gcc -I/root/minigui/arm/target/include -L/root/minigui/arm/target/lib

CFLAGS =-O2

LIBOBJS = -lminigui -lmgext -lm -lpthread -lpng -ljpeg

LIBS = -lminigui -lmgext -lm -lpthreada -lpng -ljpeg

COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \

$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -lminigui -lmgext -lm -lpthread -lpng -ljpeg

5)编译

#make

8.编译mde

1cd /root/minigui/arm/mde-1.6.10/

修改configure.in30行,这一步有没有用说不清楚,改成下面的样子

AC_CHECK_HEADERS($prefix/include/minigui/common.h, have_libminigui=”no”, foo="bar")

2)修改configure配置文件,在文件的最前面加上交叉编译的工具

CC=arm-linux-gcc

CPP=arm-linux-cpp

LD=arm-linux-ld

AR=arm-linux-ar

RANLIB=arm-linux-ranlib

STRIP=arm-linux-strip

3)配置

#./configure --prefix=/root/minigui/arm/target/ \

--host=arm-linux \

--target=arm-linux

--prefix所指定的目录必须与编译libminigui时所指定的目录一致)

4)编译

#make

四、部署图形库

1.复制MiniGUI图形库到根文件系统

#cp /root/minigui/arm/target/lib/* /root/minigui/arm/root_qtopia/lib

2.复制依赖库到根文件系统

#cp /home/bhj/tools/arm/3.4.1/arm-linux/lib/libjpeg* /root/minigui/arm/root_qtopia/lib

#cp /home/bhj/tools/arm/3.4.1/arm-linux/lib/libm* /root/minigui/arm/root_qtopia/lib

#cp /home/bhj/tools/arm/3.4.1/arm-linux/lib/libpng* /root/minigui/arm/root_qtopia/lib

#cp /home/bhj/tools/arm/3.4.1/arm-linux/lib/libpopt* /root/minigui/arm/root_qtopia/lib

#cp /home/bhj/tools/arm/3.4.1/arm-linux/lib/libttf* /root/minigui/arm/root_qtopia/lib

#cp /home/bhj/tools/arm/3.4.1/arm-linux/lib/libz* /root/minigui/arm/root_qtopia/lib

3.缓存函数库

#cd /root/minigui/arm/root_qtopia/etc

#vi ld.so.cfg(若没有,就新建一个)

(添加)

/usr/local/lib

/usr/lib

/lib

(保存)

#ldconfig -r /root/minigui/arm/root_qtopia

如果不这样做,在开发板上运行MiniGUI应用程序时可能会出现找不到库的情况。

4.复制资源文件

#mkdir -p /root/minigui/arm/root_qtopia/usr/local/lib/minigui

#cp -r /usr/local/lib/minigui/res /root/minigui/arm/root_qtopia/usr/local/lib/minigui

MiniGUI应用程序在运行时可能会用到的一些位图,光标等资源文件。)

5.复制MiniGUI.cfg到根文件系统

#mkdir /root/minigui/arm/root_qtopia/usr/local/etc

#cp /root/minigui/arm/target/etc/MiniGUI.cfg /root/minigui/arm/root_qtopia/usr/local/etc

(这是MiniGUI运行时配置文件,在MiniGUI应用程序运行时会用到。)

6.修改配置文件

#cd /root/minigui/arm/root_qtopia/usr/local/etc

#vi MiniGUI.cfg

(修改)

[system]

gal_engine=fbcon

(设置图形引擎为帧缓冲控制台fbcon

ial_engine=cosole

(设置输入引擎为控制台)

mdev=/dev/mice

(设置鼠标输入设备,此处应根据具体情况修改,先查看自己的根文件系统的/dev/目录中鼠标设备的名称,再进行修改,我的mice/dev/目录下,所以要修改为mdev=/dev/mice,否则会提示mouse初始化错误)

mtype=IMPS2

(设置输入法,若设置为mtype=none,则表示不使用鼠标)

[fbcon]

defaultmode=1024x768-16bpp

(设置fbcon显示参数,可根据实际情况进行修改)

此文件中还有一些其他的配置信息,可根据实际情况进行删改。

(保存)

7.修改启动脚本

#cd /root/minigui/arm/root_qtopia/etc/init.d

#vi rcS

(在最后添加如下内容)

/bin/ln -s/dev/vc/0 /dev/tty0

(保存)

否则会出现如下问题:

NEWGAL>FBCON:Can'topen/dev/tty0:No such file or directory

NEWGAL:Set video mode failure.

InitGUI:Can not initialize graphics engine!

8.制作根文件系统

#cd/root/minigui/arm

#mkyaffsimage root_qtopia/ root_minigui.bin(自由命名,也可生成.img格式)

9.下载并执行MiniGUI应用程序

把上面制作好的根文件系统下载并烧写到开发板上,执行可执行文件(如 ./helloworld)。

10. 编写一个自己的MiniGUI应用程序-----helloworld

#cd /root/minigui/arm

#mkdir helloworld

#cd helloworld

#cp ../mg-samples-1.6.10/src/helloworld.c ./

(复制helloworld源文件)

#vi Makefile

(编写Makefile,添加内容如下:)

TARGET=helloworld

CROSS_PATH=/home/bhj/tools/arm/3.4.1/arm-linux

(指定交叉编译函数库的位置)

helloworld:$(TARGET).c

           arm-linux-gcc -o $(TARGET) $(TARGET).c \

-L$(CROSS_PATH)/lib \

-I$(CROSS_PATH)/include \

-lminigui -lmgext -lm -lpthread -lpng -ljpeg

-L选项后添加库文件路径,-I选项后添加头文件搜索路径,

后面的-lpng -lminigui -lz -lpthread分别指名了编译时所依赖的函数库,如果使用了MiniGUI的扩展功能,还要添加-lmgext

clean:

rm $(TARGET) $(TARGET)*.o -rf

(保存)

#make

把生成的helloworld下载到开发板上执行,会发现和前面的结果一样,这里只是为了说明如何编译自己编写的应用程序。

ps:此文档由网上搜集资料和个人实际操作后总结整理而出,十分感谢那些无私奉献的网友。但个人觉得不够完善和全面,特总结至此,希望对大家有所帮助。

出于学习目的,本文档可以任意复制,修改和转载。但大家希望能保留引用。其中可能还有不少错误,欢迎批评指正!

原创粉丝点击