MiniGUI移植到ARM板.docx
《MiniGUI移植到ARM板.docx》由会员分享,可在线阅读,更多相关《MiniGUI移植到ARM板.docx(21页珍藏版)》请在冰豆网上搜索。
MiniGUI移植到ARM板
本文来自ChinaUnix博客,如果查看原文请点:
MiniGUI1.3.3移植详解
作者:
大漠孤狼 注:
红色部分为本人修改。
最近移植了MiniGUI1.3.3到一个开发板上,中间遇到许多问题,在论坛上发问题,结果也没多少人回我,就算偶尔有回的,基本上回答也没有什么用,网上找不到一个完整的移植文章,所以就决定把自己这次移植摸出来的一些方法写出来,给像我一样的小菜鸟做个参考吧。
本文不教你怎么写驱动,只是教怎么样在最短的时候在你的PC机上搭建起开发环境,同时在你的板子上跑起MiniGUI来,这样你就可以在PC上开发好程序,调试完毕,然后交叉编译一下,直接Copy到板子上就可以了。
首先,你需要下载的MiniGUI的包:
这两个包的下载需要你在
上注册过才可以下载,免费注册的,自己去下吧
图形界面程序
一些小例子
好,首先就下载这几个包吧,后面还有需要下载的包,后面再说
1.PC环境的搭建
首先你需要一个Linux环境,我安装的是RedHat9.0安装时记着选everything,这样可以避免到时候编译少了东西。
这里搭建的环境是让MiniGUI在你的PC上可以跑起来,这样以后你开发程序就可以只在PC上开发,调试好,最后交叉编译一下放到板子上就行了。
后面会讲怎么为板子编译MiniGUI,耐心的看吧:
首先建立自己的开发目录
[Root]#mkdir/opt
[Root]#cd/opt
[Root]#mkdirst2410 //这个是我的板子,
[Root]#chmod777st2410 //给一般用户操作权限
[user]#cd/opt/st2410 //进到目录中去,在这个目录下工作,用普通用户来工作
把libminigui-1.3.3.tar.gz解开
[user]#tarzxflibminigui-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
接来来就是漫长的等待了,让它慢慢的编译吧,呵
[user]#su //切到Root用户权限下,不然安装时没法把文件写到你的/usr/local目录下
[Root]#makeinstall
好了,库安装完毕,下面是安装资源
[Root]#cd/opt/st2410/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.hcontrol.hendianrw.hfixedmath.hmgext.h mywindows.hvcongui.h
config.hdti.c filedlg.hgdi.h minigui.hskin.h window.h
如果这里检查没有这些东西的话,那你前面的步骤肯定有问题,自己检查一下吧。
首先,修改你的/etc/ld.so.conf文件,在里面最后新加入一行/usr/local/lib
然后执行[Root]#ldconfig
OK!
[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中选FileConfigure640x480VGA16bit,这样看起来舒服
[user]#cd/opt/st2410/mg-samples-1.3.0/src
[user]#./helloword
OK,这个时候你应该可以看到在qvfb中的执行效果了吧,记住:
一定要先运行qvfb,并且设置qvfb,然后再运行你的程序,而且qvfb每重启一次就需要重新设置一下,真麻烦
OK你的PC环境搭建完毕了,你现在可以在PC上开发你的程序,并且编译,并在qvfb中执行,等完全验证它是正确的了,把它交叉编译一下,放到板子上去就可以了,呵呵!
!
!
MiniGUI还有一种执行方式,就是在Console下在Framebuffer上执行,这种方式太麻烦,在PC上不推荐,你还是用qvfb执行吧,方便,呵呵!
!
!
在FrameBuffer上执行
修改/usr/local/etc/MiniGUI.cfg文件,如下
[system]
#GALengine
gal_engine=fbcon
//这里修改
#IALengine
ial_engine=console
//这里修改
mdev=/dev/mouse
mtype=none//这里改成none,因为经常鼠标不正常
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp
display=0
重启动你的RedHat9,在出现Grub的时候按E键,在kernel=…..这一行的最后加入vga=0x317,然后:
Enter,然后在kernel=…这一行上按b就可以了,这时候可以在启动时看到一个小企鹅的图标,OK
进去后,直接在例子程序的目录下执行./helloword就可以了:
)
2.为你的实验板进行交叉编译
OK,PC机的开发环境已经建立好了,下面就是要移植到我们的板子上去了,这里不介绍怎么移植Linux系统,假设你已经有一个可以在板子上跑的
Linux系统了,并且已经有一个可以用的根文件系统了,并且已经有了板子相对应的LCD的驱动程序,这里介绍怎么在你的根文件系统里加上
MiniGUI,使得你的板子有图形界面的显示。
要交叉编译,首先就得有交叉编译器,这里介绍arm板的交叉编译。
不要自己去编译,直接去下载个就行了。
ftp:
//ftp.arm.linux.org.uk/pub/linux/arm/toolchain/cross-2.95.3.tar.bz2
记住这个ftp,最好的arm工具下载站,
下载回来,有35Mb,呵
1)安装交叉编译工具:
[Root]#mkdir–p/usr/local/arm
[Root]#cd/usr/local/arm
[Root]#tarjxfcross-2.95.3.tar.bz2//把工具直接解到压缩到这个目录下就安装完成了,简单吧:
)
解压缩后生成一个2.95.3目录,里面在就是工具
记住,这时候的gcc为2.95.3/bin/arm-linux-gcc而它的include为2.95.3/arm-linux/include,对应的lib为2.95.3/arm-linux/lib
也就是说,你如果用arm-linux-gcc编译程序的话,它缺省的就找2.95.3/arm-linux/include
2.95.3/arm-linux/lib两个目录,而不是/usr/include,所以如果你要加什么.h.a.so
文件话,记着一定是加到这两个目录下去,不然编译器会告诉你找不到这些东西的
把可行程序的路径加入到PATH中去,还记得前面说过的改.bashrc文件吗?
[user]#cd$HOME
[user]#vi.bashrc
在.bashrc最后面加上一句
exportPATH="$PATH:
/sbin:
/usr/local/arm/2.95.3/bin:
/usr/local/bin:
/usr/local"
[user]#source.bashrc
OK,交叉编译工具安装完了,够简单吧!
!
!
2)MiniGUI库文件装到交叉编译器中去
MiniGUI的编译需要一些库文件,缺省我们的gcc基本上都有这些库文件,所以不需要安装,可是现在要交叉编译了,交叉编译器可是不带这些库文件的,所以我们得首先自己编译这些库文件装到交叉编译器中去。
注意一点:
库不一定要装最新的,库版本太新,MiniGUI有可能不认识,像jpeg库和ttf库就是这样,太新了反而用不了,所以要注意版本,以下的库都是我验证过可以和MiniGUI一起工作的,其它版本的库没试过,不保证能正确通过。
首先安装zlib库,这个是后面的库的编译基础。
400多K,去下载吧,
下载到目录/opt/st2410下
[user]#tarzxfzlib-1.2.3.tar.gz
由于zlib库的configure脚本不支持交叉编译选项,只好自己动用了,手动临时把gcc修改成指向我们的交叉编译器arm-linux-gcc
[Root]#cd/usr/bin
[Root]#mvgccgcc_back
[Root]#ln-s/usr/local/arm/2.95.3/bin/arm-linux-gcc./gcc
[Root]#mvldld_back
[Root]#ln-s/usr/local/arm/2.95.3/bin/arm-linux-ld./ld
OK,修改完成后回到/opt/st2410/zlib-1.2.3目录下
[user]#./configure--prefix=/usr/local/arm/2.95.3/arm-linux/--shared
注意:
这里配置指向/usr/local/arm/2.95.3/arm-linux/目录,会自动安装在/usr/local/arm/2.95.3/arm-linux/[include,lib]目录下,千万不要装错目录了,不然后面会找不到这个库的
[user]#make
[Root]#makeinstall
安装完后检查一下目录/usr/local/arm/2.95.3/arm-linux/[include,lib],假如include
中没有zlib.h之类的头文件,lib中没有libz.so.1.2.3,那就自己手动拷到这些目录下去,记着拷的时候把所有的*.h
都需要拷过去,在拷库的时候用cp–alibz.*/…./lib就行,要用上–a选项
记着把刚才改过的gcc再改回去,不然后面会出错的!
!
!
!
!
如何取消此处的软链接:
#cd/usr/bin
#unlink./gcc//取消gcc,相当于删除
#mvgcc_backgcc//将gcc改回来
#cd/usr/bin
#unlink./ld//取消ld,相当于删除
#mvld_backld//将ld改回来
安装png库,这个是用来显示png图形的,MiniGUI里很多图都是png的,如果没有这个库,你的MiniGUI将无法正常工作,切记切记!
http:
//superb-
还是那句话,库不要用最新的,最新的容易有问题,用这个老一点的就没问题了,呵呵!
!
[user]#tarzxflibpng-1.0.10rc1.tar.gz
[user]#cdlibpng-1.0.10rc1
Libpng不提供有效的configure脚本,所以只好自己动手改Makefile文件了
[user]#cpscripts/makefile.linuxMakefile//把Scripts下的一个makefile拷出来自己动手改
[user]#viMakefile //自己动手改
CC=arm-linux-gcc //修改这里
#where"makeinstall"putslibpng.a,libpng.so*,png.handpngconf.h
prefix=/usr/local/arm/2.95.3/arm-linux //修改这里
#Wherethezliblibraryandincludefilesarelocated
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/usr/local/arm/2.95.3/arm-linux/lib//修改这里
ZLIBINC=/usr/local/arm/2.95.3/arm-linux/include//修改这里
好了,保存,然后去编译吧
[user]#make
[user]#makeinstall
如果有错误,检查你前面的步骤哪个没做对:
尤其是zlib的安装
还是前面说的,检查/usr/local/arm/2.95.3/arm-linux/[include,lib]目录中有成功安装否,如果没有安装成功,那就自己把编译出来的东西拷过去。
记着,*.h和.so的文件都要拷。
OK,现在来安装jpeg库
ftp:
//
自己去下载,速度暴慢
[user]#tarzxfjpegsrc.v6b.tar.gz
[user]#cdjpeg-6b
[user]#./configure–help //可以查看它的配置选项
[user]#./configure
[user]#make //生成libtool的工具
[user]#makeclean
一般情况下用[cdp@cdpserverjpeg-6b]$./configure
--prefix=/usr/local/arm/2.95.3/arm-linux/--host=arm-linux
--enable-shared--enable-static
--host=arm-linux来指定交叉编译选项,可是这里死活它不认,所以改用别的方法,如下:
[user]#./configure--prefix=/usr/local/arm/2.95.3/arm-linux/CC=arm-linux-gcc--enable-shared--enable-static
[user]#make
安装前需要在arm-linux下建个目录,不然安装会出错
[Root]#mkdir–p/usr/local/arm/2.95.3/arm-linux/man/man1
[Root]#makeinstall //OK了
一样,自己去检查一下安装是否成功!
最后安装libttf库,这个是TrueType字体的支持库,用来显示文字的。
注意:
MiniGUI的文档说只支持1.3.1版本的ttf库,不要把版本弄错了
这个库装起来最麻烦,全部自己手动编译,安装,下面一步一步来做吧
[user]#tarzxffreetype-1.3.1.tar.gz //老一套
[user]#cdfreetype-1.到目录里去
[user]#mkdir–p/opt/st2410/libttf/extend//自己另外建立一