Minigui在uClinux 上的移植心得.docx
《Minigui在uClinux 上的移植心得.docx》由会员分享,可在线阅读,更多相关《Minigui在uClinux 上的移植心得.docx(12页珍藏版)》请在冰点文库上搜索。
Minigui在uClinux上的移植心得
Minigui在uClinux上的移植心得
1、下载minigui源码
这两个包的下载需要你在上注册过才可以下载,免费注册的,自己去下吧
图形界面程序
一些小例子
2、把源码文件复制到/home/liu/minigui目录下,解开源码
[root@localhostminigui]#tarzxvflibminigui-1.3.3.tar.gz
[root@localhostminigui]#tarzxvfminigui-res-1.3.3.tar.gz
[root@localhostminigui]#tarzxvfmde-1.3.0.tar.gz
[root@localhostminigui]#tarzxvfmg-samples-1.3.0.tar.gz
3、PC环境的搭建
首先你需要一个Linux环境,我安装的是RedHat9.0 安装时记着选everything,这样可以避免到时候编译少了东西。
这里搭建的环境是让MiniGUI在你的PC上可以跑起来,这样以后你开发程序就可以只在PC上开发,调试好,最后交叉编译一下放到板子上就行了。
把libminigui-1.3.3.tar.gz解开
[user]#tar zxf libminigui-1.3.3.tar.gz
[user]#tarzxfminigui-res-1.3.3.tar.gz
编译libminigui ,这个是minigui运行所必需的库文件,必须编译成功
[user]#cdlibminigui-1.3.3
[user]#./configure //最简单的编译方式,让它自己去配置,这里采用缺省的Thread模式而不是Lite模式,因为这种方式在PC机上使用最方便,后面移到板子上再改成Lite模式即可
注意屏幕上的输出,特别是下面几条
checkingforFrameBufferconsolesupport...yes
checkingforpthreadlibrary...yes
checkingforTT_FreeType_Versionin-lttf...yes
checkingforT1_InitLibin-lt1...no
checkingforjpeg_std_errorin-ljpeg...yes
checkingforpng_check_sigin-lpng...yes
其中–lttf –lpng 必须是yes,不然后面你的程序肯定会有问题,如果这里不是yes的话,肯定是你的Redhat9安装不对,告诉过你安装时选everything,你选了吗?
?
?
其中ttf库是对TrueType字体的支持,png库是对png图形的支持,MiniGui里都需要这两个,在后面为板子交叉编译的时候也需要这两个,不然你的程序跑不起来,切记切记。
好了,现在通过了,下面是编译了
[user]#make
接来来就是漫长的等待了,让它慢慢的编译吧
注:
在make时,可能会出现如下错误:
:
/usr/include/asm/byteorder.h:
6:
2:
warning:
#warningusingprivatekernelheader;includeinstead!
stretch.c:
265:
47:
missingterminating"character
stretch.c:
267:
25:
missingterminating"character
make[3]:
***[stretch.lo]Error1
make[3]:
Leavingdirectory`/opt/st2410/libminigui-1.3.3/src/newgal'
make[2]:
***[install-recursive]Error1
make[2]:
Leavingdirectory`/opt/st2410/libminigui-1.3.3/src/newgal'
make[1]:
***[install-recursive]Error1
make[1]:
Leavingdirectory`/opt/st2410/libminigui-1.3.3/src'
make:
***[install-recursive]Error1
解决方法:
修改stretch.c文件,将265line
__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 //切到Root用户权限下,不然安装时没法把文件写到你的/usr/local目录下
[Root]#makeinstall
好了,库安装完毕,下面是安装资源
[Root]#cd/home/liu/minigui/minigui-res-1.3.3
[Root]#makeinstall
OK,基本的安装完成了,现在检查一下
看看在你的目录 /usr/local/lib下是不是有以下文件
libmgext-1.3.so.3->libmgext-1.3.so.3.0.0
libmgext-1.3.so.3.0.0
libmgext.a
libmgext.la
libmgext.so->libmgext-1.3.so.3.0.0
libminigui-1.3.so.3->libminigui-1.3.so.3.0.0
libminigui-1.3.so.3.0.0
libminigui.a
libminigui.la
libminigui.so->libminigui-1.3.so.3.0.0
libvcongui-1.3.so.3->libvcongui-1.3.so.3.0.0
libvcongui-1.3.so.3.0.0
libvcongui.a
libvcongui.la
libvcongui.so->libvcongui-1.3.so.3.0.0
里面还有一个目录minigui,可以进到里面去看,分别为minigui/res/[bmp,cursor,icon,…..]好几个目录,里面有相应的文件
检查/usr/local/include 里面是不是多了一个minigui目录,/usr/local/include/minigui时面好多的.h文件,如下:
common.h control.h endianrw.h fixedmath.h mgext.h mywindows.h vcongui.h
config.h dti.c filedlg.h gdi.h minigui.h skin.h window.h
如果这里检查没有这些东西的话,那你前面的步骤肯定有问题,自己检查一下吧。
首先,修改你的/etc/ld.so.conf文件,在里面最后新加入一行/usr/local/lib
然后执行[Root]# ldconfig
OK!
Libminigui配置
在SystemWideOptions里如下:
[*]BuildMiniGUI-Lite //用Lite方式编译,不是Thread方式,这里适用于PDA
[] Stand-Alone
[]Useincore(built-in)resource //建议不要选这个,老有问题
[*]Unitoftimeris10ms
[*]Cursorsupport
[]Usercanmovewindowwithmouse //建议别选这个,可以移动蛮烦人的
[*]Mousebuttoncandodoubleclick
[*]Buildwithdebuggingmessages
[]TracemessagesofMiniGUI //不要选这个,出来的Trace太多,看不过来
[*]Includesymbolnameofmessages
在GAL engineOptions里
(NEWGAL)GALanditsengines
[*] NEWGALengineonLinuxFrameBufferconsole
[] NEWGALengineonQtVirtualFrameBuffer //建议不要选这个,不然老让你用qvfb
[] NEWGALengineoneCosLCDinterface
[*] DummyNEWGALengine
[*]HaveconsoleonLinuxFrameBuffer
在IALengineoptions里
[]EP7211-basedboard
[]ADSGraphicsClient
[]iPAQH3600(alsoH3800)
[]MPC823
[]PX255B
[]NECVR4181
[]HelioTouchPanel
[]MTT800
[*]SMDK2410TouchScreen
[]uClinuxTouchScreenPalm/MC68EZ328
[*]DummyIALengine
[*]Native(console)inputengine
--- NativeIALenginesubdriveroptions
[] PS2mouse
[] IntelligentMouse(IMPS/2)mouse
[] MSmouse
[] MS3mouse
[*] GPMdaemon
在FontOption里
[*]Rawbitmapfont
[]Varbitmapfont //千万不要选这个,不然会出现unreferencedvfb_Courier8x8()之类的错误
[*]Incorefontsansserif
[*]Incorefontcourier
[*]Incorefontsymbol
[*]Incorefontvgas
[*]QtPrerenderedFont
[*]TrueTypefont
[]AdobeType1font
在ImageOptions里
[*]IncludesSaveBitmap-relatedfunctions
[]PCXfilesupport
[]LBM/PBMfilesupport
[]TGAfilesupport
[*]GIFfilesupport
[*]JPGfilesupport
[*]PNGfilesupport
在InputMedtholdOption里
[*]IME(GB2312)support
[]IME(GB2312)IntelligentPinyinmodule //千万不要选这个,不然后面你的mginit程序一启动就崩溃了(Abort,有点像OOP一样,显示所有的寄存器的值,然后Abort),暴不爽
在DevelopmentEnvironmentOption里
(Linux)Platform
(arm-linux-gcc)Compiler //注意这里
(glibc)Libc //注意这里
---Installationoptions
Pathprefix:
"/usr/local/arm/2.95.3/arm-linux" //注意这里,我们把库装到交叉编译器的目录下
---AdditonalCompilerFlags
CFLAGS:
""
LDFLAGS:
""
[Root]#vi/usr/local/etc/MiniGUI.cfg
在里面找到
[system]
#GALengine
#gal_engine=fbcon
gal_engine=qvfb //这里修改
#IALengine
#ial_engine=console
ial_engine=qvfb //这里修改
mdev=/dev/mouse
mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp //这里修改
display=0
保存一下,OK了!
现在你需要安装一个qvfb,因为Redhat9里面没有,从下面地址下载
老方法:
[user]#tarzxfqvfb-1.0.tar.gz
[user]#cdqvfb-1.0
[user]#./configure
[user]#make
[user]#makeinstall
在这个过程中如果出现errorwhileloadingsharedlibraries:
libqt-mt.so.3:
cannotopensharedobjectfile
说明你的系统少了libqt-mt.so.3这个库,还是回去检查一下,你安装时Redhat时是否选了everything,或者在实际操作的过程中,这个库有可以被误删除掉,我就出现过,这时候你可以google一下,输入libqt-mt.so.3redhat9,应该就可以搜到相应的rpm包,安装时
[root]#rpm–i--force[你的包名] 就OK了
这里有个下载地址,可以试试,我是用讯雷下载的,别的工具没试过
ftp:
//
注意:
在你后面的操作过程中有可能会导致libqt-mt.so.3丢失,这时候只要重装一下就OK了
解决了这个问题后重复安装过程
[user]#./configure
[user]#make
[user]#makeinstall
OK,环境搭建好了,下面是测试了:
)
还记得前面让你下载的mg-samples-1.3.0.tar.gz这个包吧,这个就是一些例子,现在试试吧:
)
[user]#tarzxfmg-samples-1.3.0.tar.gz
[user]#./configure
[user]#make
[user]#cdsrc
看看src目录下是不是已经编译出可执行文件来了
现在来执行一下吧,首先把qvfb加到你的可执行路径中去
[user]#cd$HOME
[user]#vi.bashrc
在.bashrc最后面加上一句
exportPATH="$PATH:
/sbin:
/usr/local/arm/2.95.3/bin:
/usr/local/bin:
/usr/local"
保存退出,这里面有些路径是为以后用的,比如/usr/local/arm/2.95.3/bin,先加上吧:
)
[user]#source.bashrc //让它执行一下,当然你也可以选择重启一下电脑,效果是一样的,呵
执行例子程序:
[user]#qvfb& //在图形界面下执行,呵,别告诉我你只在命令行工作啊:
)
在qvfb中选FileConfigure640x480VGA 16bit ,这样看起来舒服
[user]# cd/home/liu/minigui/mg-samples-1.3.0/src
[user]#./helloword
OK,这个时候你应该可以看到在qvfb中的执行效果了吧,记住:
一定要先运行qvfb,并且设置qvfb,然后再运行你的程序,而且qvfb每重启一次就需要重新设置一下,真麻烦
OK你的PC环境搭建完毕了,你现在可以在PC上开发你的程序,并且编译,并在qvfb 中执行,等完全验证它是正确的了,把它交叉编译一下,放到板子上去就可以了,呵呵:
)
4、交叉编译minigui库
修改scripts/mkconfig,找到
#echo"CFLAGS=\"$CFLAGS\"\\">>$CONFIG_MNU
#echo"LDFLAGS=\"$LDFLAGS\"\\">>$CONFIG_MNU
用
echo"CFLAGS=\"$CFLAGS\"\\">>$CONFIG_MNU
echo"LDFLAGS=\"$LDFLAGS\"\\">>$CONFIG_MNU
替换
[root@localhostlibminigui-1.3.3]makemenuconfig
保存退出,则生成config-mnu文件,编辑,将
#!
/bin/sh
#Automaticallygeneratedbymakemenuconfig.
rmconfig.cacheconfig.status-f
CC=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/linux-2.4.x/lib-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@localhostlibminigui-1.3.3]make
[root@localhostlibminigui-1.3.3]makeinstall
[root@localhostlibminigui-1.3.3]ldconfig
可以进入/usr/local/arm-elf目录中,你会看到新增加了etc和lib两个文件夹,这两个文件夹就是我们刚才用arm-elf-gcc交叉编译minigui的函数库所产生的结果,以后编译在目标板中运行的应用程序时,就会对这两个文件夹里的内容进行编译,从而产生适合于在arm开发板中运行的应用程序.
5、交叉编译minigui-res-1.3.3
进入minigui-res-1.3.3文件夹内,修改config.linux,在prefix=$(TOPDIR)/usr/local/后添加我们的交叉编译安装目录arm-elf,即prefix