MiniGUI-1.6.10在S3C2440上的移植

2019-07-13 03:41发布

MiniGUI-1.6.10在S3C2440上的移植 一、编译前准备 1、硬件环境 1x86系列PC 2)带有S3C2440核心板的开发板 3)液晶显示器,VGA接口线,串口和USB线,网线 2.软件环境 1)主机操作系统 VMware虚拟机下的ubuntu10.102)开发板操作系统 嵌入式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的一个扩展库,提供了一些高级控件以及“文件打开”、“颜 {MOD}选择”对话框等; 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:此文档由网上搜集资料和个人实际操作后总结整理而出,十分感谢那些无私奉献的网友。但个人觉得不够完善和全面,特总结至此,希望对大家有所帮助。 出于学习目的,本文档可以任意复制,修改和转载。但大家希望能保留引用。其中可能还有不少错误,欢迎批评指正!