Minigui在uClinux 上的移植心得1、下载minigui源码1.3.31.3.3这两个包的下载需要你在上注册过才可以下载,免费注册的,自己去下吧1.3.0 图形界面程序1.3.0 一些小例子把源码文件复制到/home/liu/minigui目录下,解开源码[root@localhost minigui]#tar zxvf 1.3.3 minigui]#tar zxvf 1.3.3 minigui]#tar zxvf 1.3.0 minigui]#tar zxvf 1.3.0环境的搭建首先你需要一个Linux 环境,我安装的是RedHat 安装时记着选everything,这样可以避免到时候编译少了东西。
这里搭建的环境是让MiniGUI 在你的PC 上可以跑起来,这样以后你开发程序就可以只在PC 上开发,调试好,最后交叉编译一下放到板子上就行了。
把 1.3.3 解开[user]# tar zxf[user]# tar zxf编译libminigui ,这个是minigui 运行所必需的库文件,必须编译成功[user]# cd libminigui-1.3.3[user]# ./configure . yeschecking for pthread library... yeschecking for TT_FreeType_Version in -lttf... yeschecking for T1_InitLib in -lt1... nochecking for jpeg_std_error in -ljpeg... yeschecking for png_check_sig in -lpng... yes其中–lttf –lpng 必须是yes ,不然后面你的程序肯定会有问题,如果这里不是yes 的话,肯定是你的Redhat 9 安装不对,告诉过你安装时选everything ,你选了吗其中ttf 库是对TrueType 字体的支持,png 库是对png 图形的支持,MiniGui 里都需要这两个,在后面为板子交叉编译的时候也需要这两个,不然你的程序跑不起来,切记切记。
好了,现在通过了,下面是编译了[user]# make接来来就是漫长的等待了,让它慢慢的编译吧注:在make时,可能会出现如下错误::/usr/include/asm/:6:2: warning: #warning using private kernel header; include <> instead!:265:47: missing terminating " character:267:25: missing terminating " charactermake[3]: *** [] Error 1make[3]: Leaving directory `/opt/st2410/libminigui-1.3.3/src/newgal'make[2]: *** [install-recursive] Error 1make[2]: Leaving directory `/opt/st2410/libminigui-1.3.3/src/newgal'make[1]: *** [install-recursive] Error 1make[1]: Leaving directory `/opt/st2410/libminigui-1.3.3/src'make: *** [install-recursive] Error 1解决方法:修改文件,将265 line__asm__ __volatile__ ("call _copy_row": "=&D" (u1), "=&S" (u2): "0" (dstp), "1" (srcp): "memory" );修改为:__asm__ __volatile__ ("call _copy_row": "=&D" (u1), "=&S" (u2): "0" (dstp), "1" (srcp): "memory" );[user]# su 1.3.33.0.0] 好几个目录,里面有相应的文件检查/usr/local/include 里面是不是多了一个minigui 目录,/usr/local/include/minigui 时面好多的.h 文件,如下:如果这里检查没有这些东西的话,那你前面的步骤肯定有问题,自己检查一下吧。
首先,修改你的/etc/ 文件,在里面最后新加入一行/usr/local/lib然后执行[Root]# ldconfigOK !Libminigui 配置在System Wide Options 里如下:[*] Build MiniGUI-Lite configure[user]# make[user]# make install在这个过程中如果出现error while loading shared libraries: cannot open shared object file说明你的系统少了这个库,还是回去检查一下,你安装时Redhat 时是否选了everything ,或者在实际操作的过程中,这个库有可以被误删除掉,我就出现过,这时候你可以google 一下,输入redhat 9 ,应该就可以搜到相应的rpm 包,安装时[root]# rpm –i --force [你的包名] 就OK了这里有个下载地址,可以试试,我是用讯雷下载的,别的工具没试过注意:在你后面的操作过程中有可能会导致丢失,这时候只要重装一下就OK 了解决了这个问题后重复安装过程[user]# ./configure[user]# make[user]# make installOK ,环境搭建好了,下面是测试了:)还记得前面让你下载的 1.3.0 这个包吧,这个就是一些例子,现在试试吧:)[user]# tar zxf[user]# ./configure[user]# make[user]# cd src看看src 目录下是不是已经编译出可执行文件来了现在来执行一下吧,首先把qvfb 加到你的可执行路径中去[user]# cd $HOME[user]# vi .bashrc在.bashrc 最后面加上一句export PATH="$PATH:/sbin:/usr/local/arm/"保存退出,这里面有些路径是为以后用的,比如/usr/local/arm/ ,先加上吧:)[user]# source .bashrc 1.3.0hellowordOK ,这个时候你应该可以看到在qvfb 中的执行效果了吧,记住:一定要先运行qvfb ,并且设置qvfb ,然后再运行你的程序,而且qvfb 每重启一次就需要重新设置一下,真麻烦OK 你的PC 环境搭建完毕了,你现在可以在PC 上开发你的程序,并且编译,并在qvfb 中执行,等完全验证它是正确的了,把它交叉编译一下,放到板子上去就可以了,呵呵:)交叉编译minigui库修改scripts/mkconfig,找到#echo "CFLAGS=\"$CFLAGS\" \\" >> $CONFIG_MNU#echo "LDFLAGS=\"$LDFLAGS\" \\" >> $CONFIG_MNU用echo "CFLAGS=\"$CFLAGS\" \\" >> $CONFIG_MNUecho "LDFLAGS=\"$LDFLAGS\" \\" >> $CONFIG_MNU替换[root@localhost libminigui-1.3.3] make menuconfig保存退出,则生成config-mnu文件,编辑,将#!/bin/sh# Automatically generated by make menuconfig.rm -fCC=arm-elf-gcc \CFLAGS="-I/home/liu/uClinux-040408/uClibc/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \LDFLAGS="-Wl,-elf2flt -static -Wl,-move-rodata -L/home/liu/uClinux-040408/lib/uClibc/lib \-L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib \-lc -lm -lpthread" \./configure --prefix=/usr/local/arm-elf \--build=i686-pc-linux-gnu \--host=arm-elf-linux \--target=arm-elf-linux \--disable-shared \--disable-lite \--disable-standalone \--enable-incoreres \--disable-flatstyle \--enable-newgal \--disable-nativegal \--disable-galcommlcd \--enable-galfbcon \--enable-adsial \--disable-micemoveable \--disable-cursor \--disable-fblin1r \--enable-fblin8 \--disable-fblin16 \--disable-fblin32 \--disable-textmode \--enable-dummyial \--disable-mc68x328ial \--disable-nativeial \--disable-qvfbial \--disable-qpfsupport \--disable-ttfsupport \--disable-type1support \--disable-latin9support \--disable-gbksupport \--disable-big5support \--disable-unicodesupport \--disable-savebitmap \--disable-imegb2312 \--disable-imegb2312py \--disable-aboutdlg \--disable-savescreen \--disable-grayscreen \--enable-tinyscreen \--enable-video-fbcon \--disable-video-qvfb \--disable-nativegalqvfb \--with-osname=uclinux覆盖原来内容[root@localhost libminigui-1.3.3] make[root@localhost libminigui-1.3.3] make install[root@localhost libminigui-1.3.3] ldconfig可以进入/usr/local/arm-elf目录中,你会看到新增加了etc和lib两个文件夹,这两个文件夹就是我们刚才用arm-elf-gcc交叉编译minigui的函数库所产生的结果,以后编译在目标板中运行的应用程序时,就会对这两个文件夹里的内容进行编译,从而产生适合于在arm开发板中运行的应用程序.交叉编译minigui-res-1.3.3进入minigui-res-1.3.3文件夹内,修改,在prefix = $(TOPDIR)/usr/local/后添加我们的交叉编译安装目录arm-elf,即prefix = $(TOPDIR)/usr/local/arm-elf.[root@localhost minigui-res-1.3.3] make install交叉编译mde-1.3.0[root@localhost minigui-res-1.3.3] cd 建立文件#! /bin/shCC=arm-elf-gcc \CFLAGS="-I/home/liu/uClinux-040408/uClibc/include -I/usr/include \-I/usr/local/arm-elf/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \ LDFLAGS="-Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib \-L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib \-lpthread -L/usr/lib -lc -lm" \./configure --prefix=/usr/local/arm-elf \--target=arm-elf-linux \--host=arm-elf-linux \-exec-prefix=/usr/local/arm-elf \--enable-static \--disable-lite执行文件[root@localhost minigui-res-1.3.3] sh修改各子目录下的Makefile文件将LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lpthread -L/usr/lib -lc -lm -lminiguiLIBS = -lm -lpthread –lminigui替换:LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lpthread -L/usr/lib -lc -lm LIBS = -lpthread –lminigui修改各子目录下的Makefile文件将:COMMON_SUBDIRS = notebook bomb housekeeper same russia controlpanel vacs \fontdemo dlgdemo ctrldemo picview替换:COMMON_SUBDIRS = notebook tools bomb housekeeper same russia controlpanel vacs \fontdemo dlgdemo ctrldemo picview注:之所以将tools去掉,因为tools编译有错误,暂时无法解决编译[root@localhost minigui-res-1.3.3]make交叉编译mg-samples-1.3.0建立文件#! /bin/shCC=arm-elf-gcc \CFLAGS="-I/home/liu/uClinux-040408/uClibc/include -I/usr/include \-I/usr/local/arm-elf/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \ LDFLAGS="-Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib \-L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib \-lc -lm" \./configure --prefix=/usr/local/arm-elf \--host=arm-elf-linux \--target=arm-elf-linux \-exec-prefix=/usr/local/arm-elf \--enable-static \--disable-lite执行文件[root@localhost mg-samples-1.3.0] sh修改src/目录下的Makefile文件将LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lc -lmLIBS = -lminigui -lm -lpthread –lc替换:LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lc -lmLIBS = -lminigui -lpthread编译[root@localhost mg-samples-1.3.0]make移植结束,但还没有测试。