本人在闲余时,想对MiniGUI做一点研究,希望能对自己所从事的项目有所帮助,所以就上网上找了一些资料,由于大部分都是针对MiniGUI 1.3.3 的,本人为了少走弯路,先只是想了解一下MiniGUI,对其有一个感性的认识,所以也就下了这个版本做练习。
这里主要是对配置和编译过程中自己碰到的一些问题进行总结(大部分知识来源于网络以及自己的亲身验证)。
本文使用的文件请到以下地址下载:
http://www.minigui.org/downloads/minigui-1.3.x/
MiniGUI图形库:libminigui- 1.3.3 .tar.gz
MiniGUI资源包,里面包含字体、图标等资源:minigui-res-1.3.tar.gz
MiniGUI v 1.3.3 示例程序:mg-samples- 1.3.0 .tar.gz
另外,我们还需要下载QVFB(Qt Virtual FrameBuffer),它可以在PC上模拟显示屏,方便调试MiniGUI应用程序。
MiniGUI官网上对QVFB进行了打包,可以直接下载:
http://www.minigui.com/fileadmin/download/qvfb-1.0.tar.gz
文件如下:
minigui-libminigui-1.3.3.tar.gz
libminigui-1.3.3/
minigui-res-1.3.3.tar.gz
minigui-res-1.3.3/
mg-samples-1.3.0.tar.gz
mg-samples-1.3.1/ (解出的不是1.3.0)
qvfb-1.0.tar.gz
qvfb-1.0/
好了,巧妇难为无米之炊,现在我们有了源料了,让我们开始吧!
首先把我使用的linux环境和版本跟大家介绍一下:
虚拟机:VMware Workstaticon 5.5.3 build-34685
Linux:2.6.11-1.1369_FC4(在安装操作系统时要选择“完全安装”,要不会有麻烦的,反正我是完全安装了)
本文使用的绝对路径(文件都保存在此路径下):/opt/st5202 (我用st5202文件夹为工作目录)
进入文件夹:
#cd libminigui- 1.3.3 /
开始配置(默认配置我没有编译通过):
#make menuconfig
在这里我们需要改一处:
Font options ——>(去掉第二项)
如果你想知道为什么要去掉第二项目,呵呵,那请用默认配置编译一下吧!
(提示:会有关于'var_bitmap_font_ops'方面的错误)
OK,保存,
如果对配置的选项不是很清楚,可以查看文档《Linux/uClinux + MiniGUI: 嵌入式系统开发原理、工具及过程》的附录B部分。
开始编译:
#make
我在make编译时出错了:
出错文件是位于ext/control/下的grid.c,到网上查了一下,可能是编译器版本太高了,才会出现这样的错误。
解决方法:
将grid.c中所有类似这样的代码:
(PGRIDCOLHDR)pCell1->pRowHdr = pRowHdr;
(PGRIDCOLHDR)pCell1->pColHdr = pCol1;
将前面的强制类型转换去掉就可以编译通过了。
(编译出错后会有提示说那行出错,把那几行的强制类型转换全去掉)
好了,重新make编译,呀,我的怎么又出错了呀:
freetype.c:809: error: static declaration of 'freetype_font_ops' follows non-static doclaration
freetype.h:62: error:previous declaration of 'freetype_font_ops' was here
... ...
这次去网上可没查到,干脆,一不做二不休,干它一票(当前在libminigui- 1.3.3 目录下):
#cd src/font/
#vim freetype.c
直接把809行的static去掉,再编译,呵呵,终于过了!(我想minigui的开发者不会出这种bug吧,不知道是什么原因,反正是测试先用着吧)
编译成功后运行:
#make install
进行libminigui库的安装,默认配置下将安装到/usr/local/目录下,可以在make menuconfig中修改“Development environment options”中的“Path prefix”来指定安装目录。如果使用其他目录,则需要注意相关的目录必须添加进环境PATH变量中,否则在编译MiniGUI应用程序时会出现找不到包含文件等错误信息。
接着要运行ldconfig加载新生成的链接库,否则将会出现类似找不到“libminigui-1.3.so .3 ” 的错误消息。
修改你的 /etc/ld.so.conf 文件,在里面最后新加入一行 /usr/local/lib
然后执行:
# ldconfig
OK !
接着安装MiniGUI的资源包:
#cd minigui-res- 1.3.3 /
#make install
安装qvfb:
#cd qvfb-1.0/
#./configure
#make
哎,怎么又出错了呀,搞点东东怎么这么费事呀,不过还好,有解决的办法,是关于pthread_kill_other_threads_np问题的,说:gcc -g -O2 -Wall -Wstrict-prototypes -pipe -D_REENTRANT -o helloworld helloworld.o -lminigui -lpthread -lc -lm -lpng –ljpeg
/usr/local/lib/libminigui.so: undefined reference to `pthread_kill_other_threads_np'
又去网上查,一查,搞定!
人家有三种方法呢:
解决方法主要有以下3种:
是 FC 4 中的 pthread 库升级造成的。
1 阅读 FC 4 的 Release Notes,其中有描述如何沿用旧的 pthread 库
的方法。照这个方法配置一下系统就可以了。
2 删除 MiniGUI 源代码中调用'pthread_kill_other_threads_np'这个函数
的语句。应该在 src/kernel/init.c 文件中,也可以运行 grep 找一下这个函数。
3.使用2.0以上的版本就可以或者使用FC 3以下的版本.
这里俺懒,选择2,呵呵!
434 #ifndef __ECOS
435 pthread_kill_other_threads_np();
436 #endif
重新make编译,通过。
#make install
配置qvfb并运行示例程序:
编辑/usr/local/etc/MiniGUI.cfg,将GAL和IAL引擎均改为qvfb:
25 [system]
26 # GAL engine
27 gal _engine=qvfb
28
29 # IAL engine
30 ial_engine=qvfb
31
32 mdev=/dev/mouse
33 mtype=IMPS2
34
35 [fbcon]
36 defaultmode=1024x768-16bpp
37
38 [qvfb]
39 defaultmode=640x480-16bpp
40 display=0
41
现在来执行一下吧,首先把 qvfb 加到你的可执行路径中去
# cd $HOME
# vim .bashrc
在 .bashrc 最后面(最后新启一行)加上一句
export PATH="$PATH:/sbin:/usr/local/bin:/usr/local"
保存退出
# source .bashrc //让它执行一下,当然你也可以选择重启一下电脑,效果是一样的
执行例子程序(在图形界面下执行):
# qvfb &
记住:一定要先运行 qvfb ,并且设置 qvfb ,然后再运行你的程序,而且qvfb 每重启一次就需要重新设置一下,真麻烦!(还得与/usr/local/etc/MiniGUI.cfg中的信息一致)
这里我们需要设置640x480 16bit
设置完后,点击OK!
好了,开始玩吧!
需要重新开 终端 哦!
#cd /opt/st2410/ mg-samples- 1.3.0 /src
#./helloword
其它的自己看效果吧!