MiniGUI 1.3.3 移植详解
目标:
PC机上搭建起开发环境,同时在板子上跑起MiniGUI,这样就可以在PC上开发好程序,调试完毕,然后交叉编译一下,直接Copy到板子上就可以了。
开发环境:
主机:rh9 重要:需要完全安装
目标机:龙一NC
主机编译器:gcc-3.2.2
交叉编译器:godson-gnu-cross.tgz 2.96版本
------------------------------------------------------------------------------------------------------------
1.PC环境的搭建
下载的MiniGUI 的包:
http://www.minigui.com/download/libminigui-1.3.3.tar.gz
http://www.minigui.com/download/minigui-res-1.3.3.tar.gz 资源
http://www.minigui.com/downloads/minigui13/mde-1.3.0.tar.gz 图形界面程序
http://www.minigui.com/downloads/minigu...es-1.3.0.tar.gz 一些小例子
http://www.minigui.com/downloads/dep-libs/qvfb-1.0.tar.gz
首先需要安装RedHat 9.0 ,安装时记着选 everything ,这样可以避免到时候编译少了东西。这里搭建的环境是让 MiniGUI 在你的 PC 上可以跑起来,这样以后你开发程序就可以只在 PC 上开发,调试好,最后交叉编译一下放到板子上就行了。
建立自己的开发目录
[Root]# mkdir /opt
[Root]# cd /opt
[Root]# mkdir nc
[Root]# chmod 777 nc //给一般用户操作权限
[Root]# cd /opt/nc //进到目录中去,在这个目录下工作,用普通用户来工作
把 libminigui-1.3.3.tar.gz 解开
[Root]# tar zxf libminigui-1.3.3.tar.gz
[Root]# tar zxf minigui-res-1.3.3.tar.gz
编译 libminigui ,这个是 minigui 运行所必需的库文件,必须编译成功
[Root]# cd libminigui-1.3.3
[Root]# ./configure //最简单的编译方式,让它自己去配置 ,这里采用缺省的Thread 模式而不是Lite模式,因为这种方式在 PC 机上使用最方便,后面移到板子上再改成 Lite 模式
注意屏幕上的输出,特别是下面几条
checking for FrameBuffer console support... yes
checking for pthread library... yes
checking for TT_FreeType_Version in -lttf... yes
checking for T1_InitLib in -lt1... no
checking for jpeg_std_error in -ljpeg... yes
checking for png_check_sig in -lpng... yes
其中 –lttf –lpng 必须是 yes ,如果这里不是 yes 的话,肯定是 Redhat 9 安装不对
其中 ttf 库是对 TrueType 字体的支持,png 库是对 png 图形的支持,MiniGui 里都需要这两个,在后面为板子交叉编译的时候也需要这两个库
好了,现在通过了,下面是编译
[Root]# make
[Root]# make install
库安装完毕,下面是安装资源
[Root]# cd /opt/nc/minigui-res-1.3.3
[Root]# make install
基本的安装完成了,现在检查一下
看看在目录 /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
[Root]# vi /usr/local/etc/MiniGUI.cfg
[system]
# GAL engine
#gal_engine=fbcon
gal_engine=qvfb //这里修改
# IAL engine
#ial_engine=console
ial_engine=qvfb //这里修改
mdev=/dev/mouse
mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp //这里修改
display=0
现在安装一个 qvfb
[Root]# tar zxf qvfb-1.0.tar.gz
[Root]# cd qvfb-1.0
[Root]# ./configure
[Root]# make
[Root]# make install
在这个过程中如果出现 error while loading shared libraries: libqt-mt.so.3: cannot open shared object file
说明系统少了 libqt-mt.so.3 这个库,回去检查一下,看安装时Redhat 时是否选了 everything ,或者在实际操作的过程中,这个库有可能被误删除掉,
ftp://ftp.pbone.net/mirror/www-ccrma.s....ccrma.i386.rpm
PS:后面的操作过程中有可能会导致 libqt-mt.so.3 丢失,这时候只要重装一下就好了。
接下来进行测试
[Root]# tar zxf mg-samples-1.3.0.tar.gz
[Root]# ./configure
[Root]# make
[Root]# cd src
看看 src 目录下是不是已经编译出可执行文件来了
现在来执行一下,首先把 qvfb 加到可执行路径中去
[Root]# cd $HOME
[Root]# vi .bashrc
在 .bashrc 里加上一句
export PATH=/usr/tools/bin:$PATH
[Root]# source .bashrc
执行例子程序:
[Root]# qvfb & //在图形界面下执行
在 qvfb 中选 File->Configure->640x480 VGA 16bit
[Root]# cd /opt/nc/ mg-samples-1.3.0/src
[Root]# ./helloword
2.为你的实验板进行交叉编译
首先安装交叉编译器
[Root]# tar zxvf godson-gun-cross.tgz -C /usr
[Root]# cd /usr
[Root]# mv mips-tools tools //后面编译时有默认tools文件夹的隐藏属性,改了省事
记住,这时候的gcc为 tools/bin/mipsel-linux-gcc 而它的 include 为 tools/mipsel-linux/include ,对应的 lib 为 tools/mipsel-linux/lib
把可行程序的路径加入到 PATH 中去
[Root]# cd $HOME
[Root]# vi .bashrc
在 .bashrc 最后面加上一句
export PATH=/usr/tools/bin:$PATH
[Root]# source .bashrc
OK ,交叉编译工具安装完了
MiniGUI 的编译需要一些库文件,缺省我们的 gcc 基本上都有这些库文件,所以不需要安装,可是现在要交叉编译了,交叉编译器是不带这些库文件的,所以我们得首先自己编译这些库文件装到交叉编译器中去。
注意一点:库不一定要装最新的,库版本太新,MiniGUI 有可能不认识,像jpeg 库和 ttf 库就是这样,太新了反而用不了,所以要注意版本
首先安装 zlib 库,这个是后面的库的编译基础。
http://www.zlib.net/zlib-1.2.3.tar.gz
下载到目录 /opt/nc 下
[Root]# tar zxf zlib-1.2.3.tar.gz
由于 zlib 库的configure 脚本不支持交叉编译选项,只好自己动用了,手动临时把 gcc 修改成指向我们的交叉编译器 mipsel-linux-gcc
[Root]# cd /usr/bin
[Root]# mv gcc gcc_back
[Root]# ln -s /usr/tools/bin/mipsel-linux-gcc ./gcc
[Root]# mv ld ld_back
[Root]# ln -s /usr/tools/bin/mipsel-linux-ld ./ld
OK ,修改完成后回到 /opt/nc/zlib-1.2.3 目录下
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ --shared
接下来屏幕上会有提示不支持动态编译的提示,不用管,继续
[Root]vi Makefile
将里面的CC=gcc 改为mipsel-linux-gcc,ld改为mipsel-linux-ld ,ranlib改为mipsel-linux-ranlib
注意:这里配置指向 /usr/tools/mipsel-linux/ 目录,会自动安装在 /usr/tools/mipsel-linux/ [include,lib] 目录下,千万不要装错目录了,不然后面会找不到这个库的
[Root]# make
[Root]# make install
安装完后检查一下目录 /usr/tools/mipsel-linux/ [include,lib] ,假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3或libz.so.1.1.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp –a libz.* /…./lib 就行,要用上 –a 选项
记着把刚才改过的 gcc 再改回去
安装 png 库,这个是用来显示 png 图形的,MiniGUI 里很多图都是 png 的,如果没有这个库,MiniGUI 将无法正常工作
http://superb-east.dl.sourceforge.net/s....0.10rc1.tar.gz
[Root]# tar zxf libpng-1.0.10rc1.tar.gz
[Root]# cd libpng-1.0.10rc1
Libpng 不提供有效的 configure 脚本,所以只好自己动手改 Makefile 文件
[Root]# cp scripts/makefile.linux Makefile //把 Scripts 下的一个 makefile 拷出来自己动手改
[Root]# vi Makefile // 自己动手改
CC=mipsel-linux-gcc //修改这里
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
prefix=/usr/tools/mipsel-linux //修改这里
# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/usr/tools/mipsel-linux/lib //修改这里
ZLIBINC=/usr/tools/mipsel-linux/include //修改这里
好了,保存,然后去编译吧
[Root]# make
[Root]# make install
如果有错误,检查你前面的步骤哪个没做对, 尤其是 zlib 的安装
还是前面说的,检查 /usr/tools/mipsel-linux/ [include,lib] 目录中有成功安装否,如果没有安装成功,那就自己把编译出来的东西拷过去。记着,*.h 和 .so 的文件都要拷。
现在来安装 jpeg 库
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
[Root]# tar zxf jpegsrc.v6b.tar.gz
[Root]# cd jpeg-6b
一般情况下用
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ --host=mipsel-linux --enable-shared --enable-static
--host=mipsel-linux 来指定交叉编译选项,可是这里好象有点问题,可改用
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ CC=mipsel-linux-gcc --enable-shared --enable-static
[Root]# make
[Root]# mkdir –pv /usr/tools/mipsel-linux/man/man1
[Root]# make install
如上,检查一下安装是否成功。
最后安装 libttf 库,这个是 TrueType 字体的支持库,用来显示文字的。
http://nchc.dl.sourceforge.net/sourcefo...pe-1.3.1.tar.gz
注意:MiniGUI只支持 1.3.1 版本的 ttf 库
[Root]# tar zxf freetype-1.3.1.tar.gz
[Root]# cd freetype-1.3.1 //进到目录里去
[Root]# mkdir –p /opt/nc/libttf/extend // 自己另外建立一个目录
[Root]# cp lib/* lib/arch/ansi/* ../libttf/ //把有用的东西拷出来
[Root]# cp lib/extend/* ../libttf/extend/ 把 extend 目录下的文件也拷出来
[Root]# cd libttf
[Root]# mipsel-linux-gcc -c -fPIC -O2 freetype.c
[Root]# mipsel-linux-gcc -c -fPIC -O2 -I./ extend/*.c 把 extend 下所有的 .c 文件全部编译
[Root]# mipsel-linux-gcc --shared -o libttf.so *.o 生成最后的动态链接库
现在手动安装
[Root] mkdir –p /usr/tools/mipsel-linux/include/freetype1/freetype
[Root] cp *.h extend/*.h /usr/tools/mipsel-linux/include/freetype1/freetype
[Root] cp libttf.so /usr/tools/mipsel-linux/lib
安装库完成
MiniGUI 1.3.3 版本在链接 ljpeg lpng lttf 时老是要链接 /usr/lib 下的库,没办法,用老方法
[Root]# cd /usr/lib
[Root]# mv libjpeg.so libjpeg.so_back
[Root]# ln –s /usr/tools/mipsel-linux/lib/libjpeg.so ./libjpeg.so //指向 mipsel 的库
[Root]# mv libpng.so libpng.so_back
[Root]# ln –s /usr/tools/mipsel-linux/lib/libpng.so ./libpng.so
[Root]# mv libttf.so libttf.so_back
[Root]# ln –s /usr/tools/mipsel-linux/lib/libttf.so ./libttf.so
完成以上工作后就可以编译 libminigui 了
[Root]# cd libminigui-1.3.3
[Root]# make menuconfig
如果在 make menuconfig 出错,去检查一下你的 gcc ,前面我们把它指向 mipsel-linux-gcc 如果没改回来,这里会出错。
下面是配置libminigui
在 System Wide Options 里如下:
[*] Build MiniGUI-Lite //用 Lite 方式编译,不是Thread 方式,这里适用于 PDA
[ ] Stand-Alone
[ ] Use incore (built-in) resource //建议不要选这个,老有问题
[*] Unit of timer is 10ms
[*] Cursor support
[ ] User can move window with mouse //建议别选这个,可以移动蛮烦人的
[*] Mouse button can do double click
[*] Build with debugging messages
[ ] Trace messages of MiniGUI //不要选这个,出来的Trace太多,看不过来
[*] Include symbol name of messages
在 GAL engine Options 里
(NEWGAL) GAL and its engines
[*] NEWGAL engine on Linux FrameBuffer console
[ ] NEWGAL engine on Qt Virtual FrameBuffer //建议不要选这个,不然老让你用qvfb
[ ] NEWGAL engine on eCos LCD interface
[*] Dummy NEWGAL engine
[*] Have console on Linux FrameBuffer
在 IAL engine options 里
[ ] EP7211-based board
[ ] ADS Graphics Client
[ ] iPAQ H3600 (also H3800)
[ ] MPC823
[ ] PX255B
[ ] NEC VR4181
[ ] Helio Touch Panel
[ ] MT T800
[ ] SMDK2410 Touch Screen
[ ] uClinux Touch Screen Palm/MC68EZ328
[*] Dummy IAL engine
[*] Native (console) input engine
--- Native IAL engine subdriver options
[*] PS2 mouse /可选可不选
[*] IntelligentMouse (IMPS/2) mouse /NC用的USB鼠标协议
[ ] MS mouse
[ ] MS3 mouse
[*] GPM daemon
在 Font Option 里
[*] Raw bitmap font
[ ] Var bitmap font //千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误
[*] Incore font sansserif
[*] Incore font courier
[*] Incore font symbol
[*] Incore font vgas
[*] Qt Prerendered Font
[*] TrueType font
[ ] Adobe Type1 font
在 Image Options 里
[*] Includes SaveBitmap-related functions
[ ] PCX file support
[ ] LBM/PBM file support
[ ] TGA file support
[*] GIF file support
[*] JPG file support
[*] PNG file support
在 Input Medthold Option 里
[*] IME (GB2312) support
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个, mginit 程序一启动就崩溃了(Abort ,有点像 OOP一样,显示所有的寄存器的值,然后Abort)
在 Development Environment Option 里
(Linux) Platform
(mipsel-linux-gcc) Compiler //注意这里
(glibc) Libc //注意这里
--- Installation options
Path prefix: "/usr/tools/mipsel-linux" //注意这里,我们把库装到交叉编译器的目录下
--- Additonal Compiler Flags
CFLAGS: ""
LDFLAGS: ""
其它的用缺省的选项就可以了,现在退出,保存你的设置吧,然后它就开始检测你的系统了,注意下面的输出:
*****************************************************************************************
checking for FrameBuffer console support... yes
checking for TT_FreeType_Version in -lttf... yes //True Type字体
checking for jpeg_std_error in -ljpeg... yes // jpeg 支持
checking for png_check_sig in -lpng... yes //png 图形支持
checking for pow in -lm... yes
这里的库应该都是显示为 yes 了,如果有 no 的话,回去检查前面你有哪步做得不对,不然的话编译后的东西可能没法正常执行
如果你用的不是redhat 9.0的完全安装系统,到这步很有可能出现freetype/jpeg/png不支持,已知情况有,debian可能不支持freetype,FC5在PC安装检测就无法通过,FC3 JPEG不支持。强烈建议使用完全的RH9,这样可以使你省去非常多的麻烦。
*****************************************************************************************
如果这里通过了,就继续
[Root]# make
期间有几次错误出现,得手动修改
fbvideo.c: In function `FB_VideoInit':
fbvideo.c:715: error: `PAGE_SIZE' undeclared (first use in this function)
fbvideo.c:715: error: (Each undeclared identifier is reported only once
fbvideo.c:715: error: for each function it appears in.)
make[4]: *** [fbvideo.lo] 错误 1
make[4]: Leaving directory `/opt/libminigui-1.3.3/src/newgal/fbcon'
make[3]: *** [all-recursive] 错误 1
make[3]: Leaving directory `/opt/libminigui-1.3.3/src/newgal'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/opt/libminigui-1.3.3/src'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/opt/libminigui-1.3.3'
make: *** [all] 错误 2
PAGE_SIZE在page.h中定义,在交叉编译器的asm目录下确实存在,进入page.h中查看了代码,发现有两个ifdef可能让里面的PAGE_SIZE定义无法被外面读取,注释这两个条件编译后还是不行,试了很多方法都没成功,只好直接在fbvideo.c中直接定义了PAGE_SIZE为4K
*******
另外在stretch.c:265:47: missing terminating " character
stretch.c:267:25: missing terminating " character
删掉 " " 之间的TAB就OK了
*******
/usr/tools/mipsel-linux/bin/ld: template.lo: Relocations in generic ELF (EM: 3)
template.lo: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[3]: *** [libminigui.la] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
找到template.c/h的文件夹,删除里面的template.lo,继续make
*******
[Root]# make install
装好了,到 /usr/tools/mipsel-linux 的 include lib 目录下去看看,是不是多了相应的 libminigui.so libmgext.so libvcongui.so 在 include 目录下多了一个 minigui 目录,里面有相应的头文件
最后,安装 popt 库,这个库在编译 mde 程序时需要使用,不然编译没法通过
http://gd.tuwien.ac.at/utils/rpm.org/di...popt-1.7.tar.gz 我是从这里下载的
[Root]# tar zxf popt-1.7.tar.gz
[Root]# cd popt-1.7
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ --host=mipsel-linux --enable-shared --enable-static
[Root]# make
[Root]# make install
下面把 minigui 移植到板子上
/opt 目录下建立了一个 rootfs 目录,即 /opt/rootfs ,用来建立我根目录,现在我需要把 minigui 的库文件放到里面去,
建立目录
[Root]# mkdir –p /opt/rootfs/usr/local/[lib,etc]
把 /usr/tools/mipsel-linux/lib 中相应的库拷到 /opt/rootfs/usr/local/lib 目录下去
libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so
libjpeg.la libmgext-1.3.so.3.0.0 libminigui.la libpng.so.2.1.0.10rc1 libttf.so libz.so.1
libjpeg.so libmgext.a libminigui.so libpopt.a libvcongui-1.3.so.3 libz.so.1.2.3
libjpeg.so.62 libmgext.la libm.so libpopt.la libvcongui-1.3.so.3.0.0 minigui
libjpeg.so.62.0.0 libmgext.so libm.so.6 libpopt.so libvcongui.a shared
libm-2.2.3.so libminigui-1.3.so.3 libpng.a libpopt.so.0 libvcongui.la
libm.a libminigui-1.3.so.3.0.0 libpng.so libpopt.so.0.0.0 libvcongui.so
同时修改 /opt/rootfs/etc/ld.so.conf,在里面最后新加入一行 /usr/local/lib
然后执行 [Root] ldconfig –r /opt/rootfs //把 rootfs 当成根目录,执行
OK,库文件准备完毕
下面把资源文件也拷过来,在前面搭建 PC 环境中的资源文件,它被装在了 /usr/local/lib 目录下,一个叫 minigui 的目录,我们要做的就是把它拷过来
[Root]# cp –r –a /usr/local/lib/minigui /opt/rootfs/usr/local/ 连目录一起拷过来,目录结构和主机一样
把配置文件也拷过来
[Root]# cp /usr/local/etc/MiniGUI.cfg /opt/rootfs/usr/local/etc/ 记住,保持目录结构的一致
修改 MiniGUI.cfg ,如下
[system]
# GAL engine
gal_engine=fbcon //这里修改
# IAL engine
ial_engine=console
mdev=/dev/input/mice //鼠标
mtype=IMPS2
[fbcon]
defaultmode=640x480-16bpp // 设置错误minigui 就启动不了
3.启动你的 MiniGUI 的图形界面
[Root]# tar zxf mde-1.3.0.tar.gz
[Root]# cd mde-1.3.0
//我们先对 mginit 程序做一点小修改,呵
[Root]# cd mginit ; vi mginit.c
在 297 行处,把下面代码注释掉
/***************
AboutMiniGUI ();
AboutMDE ();
**************/
保存,退出即可。
因为我们没有 触摸屏 现在,没法点它的 确认 按钮,所以把这些 About 信息去掉
好了,现在来编译吧,在mde-1.3.0 目录里
[Root]# ./configure --prefix=/opt/rootfs/usr/local --host=mipsel-linux
[Root]# make
如果你发现 mginit 目录下的程序没有被编译,那就说明你的 libminigui 配置不正确,记住,你必须是配置为 Lite 模式,这个程序才会被编译
[Root]# make install
事实上证明,make install,根本没用,它什么都没做,所以还是自己动手来做
[Root]# mkdir –p /opt/rootfs/usr/local/lib/shared/miniguiapps
[Root]# cp –r –a mde-1.3.0/* /opt/rootfs/usr/local/lib/shared/miniguiapps
直接全部拷过去,然后到 /opt/rootfs/usr/local/lib/shared/miniguiapps 的各个程序目录下去,比如 mginit , bomb , painter 之类的,把不用的 .c .h .o Makefile 之类的全删除掉,保留 可执行文件和相应的 res 目录下的资源
OK,最后一步了,修改配置文件
[Root]# mkdir -p /nfsroot/au
[Root]# tar zxvf au.xxxx.tar.gz(NC的文件系统包) -C /nfsroot/au
[Root]# cd /opt/rootfs
[Root]# cp -a * /nfsroot/au
[Root]# vi /opt/rootfs/etc/rc.d/rc.sysinit
注释了最后面一行的./startx &
加入
cd /usr/local/lib/shared/miniguiapps/mginit
./mginit
注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误
“ Can not attach shared resource ! ”
[Root]# mipsel-linux-gcc –O2 –o helloword helloword.c –lminigui –lmgext
[Root]# mv helloword /nfsroot/au/
板子起来后,就可以在根目录下执行应用程序了
4.一些常见的问题
问题1:在板子上跑的程序都显示 can not find qvfb … 之类,可是我只是想让它在板子上跑在 FrameBuffer 之上啊?
解决:在编译 libminigui 的时候,把
[ ] Use incore (built-in) resource //建议不要选这个,老有问题
[ ] NEWGAL engine on Qt Virtual FrameBuffer //建议不要选这个,不然老让你用qvfb
问题2:编译的时候老出现 unreferenced to vbf_Courier8x8() 之类的问题
解决:
[ ] Var bitmap font //千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误
问题3:一切都搞定了,可是执行 mginit() 的时候就崩溃了,把所有的寄存器值打印了出来,然后显示了个 Abort() 就退出了!
解决:
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了
问题4: 为什么我执行 helloword 就显示 “Can not attach shared resource!”
解决:
注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误
“ Can not attach shared resource ! ”
问题5:怎么把自己的程序加到 minigui 的 taskbar 上去,并且排在前面??
解决:
查看 mginit 目录下的 mginit.rc 文件,里面就是配置
问题6:为什么我的程序显示 can not find libminigui.so ??
解决:你是否忘了在 etc/ld.so.conf 中加入 /usr/local/lib ,并且执行 ldconfig 程序? 看前面说的方法
问题7:在板子上起来有step1 - step 9的错误发生
解决:修改vi /nfsroot/au/usr/local/etc/MiniGui.conf,这个文件中有很多资源的位置不对,把路径对应好就可以了
编译过程中的错误
The server encountered a temporary error and could not complete your request
Error in step 9: Can not initialize low level event!
报错
IAL Native Engine: Can not init mouse!
IAL : Init IAL engine failure.
Error in step 9: Can not initialize low level event!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
上网看说是鼠标权限不够,好吧
mknod /dev/psaux c 10 1
ln -sv /dev/psaux /dev/mouse
可以解决问题。
出现错误
GDI: Error in loading raw bitmap fonts!
GDI: Can not initialize raw bitmap fonts!
Error in step 4: MiniGUI: Initialization of GDI resource failure!
IAL: Use Console engine.
IME: Loading Input Method 0: pinyin
Can not create task bar.
应该存在这个文件
/usr/local/lib/minigui
需要将
/usr/local/minigui 拷贝到/usr/local/lib/下可以消除这个错误
AttachSharedResource: Invalid argument
Error in step 7: can not attach shared resoure!
错误:
图形启动后出现Create Terminal error!的错误即不能创建虚拟终端的情况是由于没有
/dev/ptysf设备节点的原因,同时需要内核支持老的伪终端机制
创建设备节点
mknod /dev/ptysf c 2 63
交叉编译应用程序,设定交叉编译的库文件和库文件路径 -L/usr/tools/lib -I/usr/tools/include/
mipsel-linux-gcc –O2 –o helloword helloword.c -L/usr/tools/lib -I/usr/tools/include/ –lminigui –lmgext
目标:
PC机上搭建起开发环境,同时在板子上跑起MiniGUI,这样就可以在PC上开发好程序,调试完毕,然后交叉编译一下,直接Copy到板子上就可以了。
开发环境:
主机:rh9 重要:需要完全安装
目标机:龙一NC
主机编译器:gcc-3.2.2
交叉编译器:godson-gnu-cross.tgz 2.96版本
------------------------------------------------------------------------------------------------------------
1.PC环境的搭建
下载的MiniGUI 的包:
http://www.minigui.com/download/libminigui-1.3.3.tar.gz
http://www.minigui.com/download/minigui-res-1.3.3.tar.gz 资源
http://www.minigui.com/downloads/minigui13/mde-1.3.0.tar.gz 图形界面程序
http://www.minigui.com/downloads/minigu...es-1.3.0.tar.gz 一些小例子
http://www.minigui.com/downloads/dep-libs/qvfb-1.0.tar.gz
首先需要安装RedHat 9.0 ,安装时记着选 everything ,这样可以避免到时候编译少了东西。这里搭建的环境是让 MiniGUI 在你的 PC 上可以跑起来,这样以后你开发程序就可以只在 PC 上开发,调试好,最后交叉编译一下放到板子上就行了。
建立自己的开发目录
[Root]# mkdir /opt
[Root]# cd /opt
[Root]# mkdir nc
[Root]# chmod 777 nc //给一般用户操作权限
[Root]# cd /opt/nc //进到目录中去,在这个目录下工作,用普通用户来工作
把 libminigui-1.3.3.tar.gz 解开
[Root]# tar zxf libminigui-1.3.3.tar.gz
[Root]# tar zxf minigui-res-1.3.3.tar.gz
编译 libminigui ,这个是 minigui 运行所必需的库文件,必须编译成功
[Root]# cd libminigui-1.3.3
[Root]# ./configure //最简单的编译方式,让它自己去配置 ,这里采用缺省的Thread 模式而不是Lite模式,因为这种方式在 PC 机上使用最方便,后面移到板子上再改成 Lite 模式
注意屏幕上的输出,特别是下面几条
checking for FrameBuffer console support... yes
checking for pthread library... yes
checking for TT_FreeType_Version in -lttf... yes
checking for T1_InitLib in -lt1... no
checking for jpeg_std_error in -ljpeg... yes
checking for png_check_sig in -lpng... yes
其中 –lttf –lpng 必须是 yes ,如果这里不是 yes 的话,肯定是 Redhat 9 安装不对
其中 ttf 库是对 TrueType 字体的支持,png 库是对 png 图形的支持,MiniGui 里都需要这两个,在后面为板子交叉编译的时候也需要这两个库
好了,现在通过了,下面是编译
[Root]# make
[Root]# make install
库安装完毕,下面是安装资源
[Root]# cd /opt/nc/minigui-res-1.3.3
[Root]# make install
基本的安装完成了,现在检查一下
看看在目录 /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
[Root]# vi /usr/local/etc/MiniGUI.cfg
[system]
# GAL engine
#gal_engine=fbcon
gal_engine=qvfb //这里修改
# IAL engine
#ial_engine=console
ial_engine=qvfb //这里修改
mdev=/dev/mouse
mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp //这里修改
display=0
现在安装一个 qvfb
[Root]# tar zxf qvfb-1.0.tar.gz
[Root]# cd qvfb-1.0
[Root]# ./configure
[Root]# make
[Root]# make install
在这个过程中如果出现 error while loading shared libraries: libqt-mt.so.3: cannot open shared object file
说明系统少了 libqt-mt.so.3 这个库,回去检查一下,看安装时Redhat 时是否选了 everything ,或者在实际操作的过程中,这个库有可能被误删除掉,
ftp://ftp.pbone.net/mirror/www-ccrma.s....ccrma.i386.rpm
PS:后面的操作过程中有可能会导致 libqt-mt.so.3 丢失,这时候只要重装一下就好了。
接下来进行测试
[Root]# tar zxf mg-samples-1.3.0.tar.gz
[Root]# ./configure
[Root]# make
[Root]# cd src
看看 src 目录下是不是已经编译出可执行文件来了
现在来执行一下,首先把 qvfb 加到可执行路径中去
[Root]# cd $HOME
[Root]# vi .bashrc
在 .bashrc 里加上一句
export PATH=/usr/tools/bin:$PATH
[Root]# source .bashrc
执行例子程序:
[Root]# qvfb & //在图形界面下执行
在 qvfb 中选 File->Configure->640x480 VGA 16bit
[Root]# cd /opt/nc/ mg-samples-1.3.0/src
[Root]# ./helloword
2.为你的实验板进行交叉编译
首先安装交叉编译器
[Root]# tar zxvf godson-gun-cross.tgz -C /usr
[Root]# cd /usr
[Root]# mv mips-tools tools //后面编译时有默认tools文件夹的隐藏属性,改了省事
记住,这时候的gcc为 tools/bin/mipsel-linux-gcc 而它的 include 为 tools/mipsel-linux/include ,对应的 lib 为 tools/mipsel-linux/lib
把可行程序的路径加入到 PATH 中去
[Root]# cd $HOME
[Root]# vi .bashrc
在 .bashrc 最后面加上一句
export PATH=/usr/tools/bin:$PATH
[Root]# source .bashrc
OK ,交叉编译工具安装完了
MiniGUI 的编译需要一些库文件,缺省我们的 gcc 基本上都有这些库文件,所以不需要安装,可是现在要交叉编译了,交叉编译器是不带这些库文件的,所以我们得首先自己编译这些库文件装到交叉编译器中去。
注意一点:库不一定要装最新的,库版本太新,MiniGUI 有可能不认识,像jpeg 库和 ttf 库就是这样,太新了反而用不了,所以要注意版本
首先安装 zlib 库,这个是后面的库的编译基础。
http://www.zlib.net/zlib-1.2.3.tar.gz
下载到目录 /opt/nc 下
[Root]# tar zxf zlib-1.2.3.tar.gz
由于 zlib 库的configure 脚本不支持交叉编译选项,只好自己动用了,手动临时把 gcc 修改成指向我们的交叉编译器 mipsel-linux-gcc
[Root]# cd /usr/bin
[Root]# mv gcc gcc_back
[Root]# ln -s /usr/tools/bin/mipsel-linux-gcc ./gcc
[Root]# mv ld ld_back
[Root]# ln -s /usr/tools/bin/mipsel-linux-ld ./ld
OK ,修改完成后回到 /opt/nc/zlib-1.2.3 目录下
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ --shared
接下来屏幕上会有提示不支持动态编译的提示,不用管,继续
[Root]vi Makefile
将里面的CC=gcc 改为mipsel-linux-gcc,ld改为mipsel-linux-ld ,ranlib改为mipsel-linux-ranlib
注意:这里配置指向 /usr/tools/mipsel-linux/ 目录,会自动安装在 /usr/tools/mipsel-linux/ [include,lib] 目录下,千万不要装错目录了,不然后面会找不到这个库的
[Root]# make
[Root]# make install
安装完后检查一下目录 /usr/tools/mipsel-linux/ [include,lib] ,假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3或libz.so.1.1.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp –a libz.* /…./lib 就行,要用上 –a 选项
记着把刚才改过的 gcc 再改回去
安装 png 库,这个是用来显示 png 图形的,MiniGUI 里很多图都是 png 的,如果没有这个库,MiniGUI 将无法正常工作
http://superb-east.dl.sourceforge.net/s....0.10rc1.tar.gz
[Root]# tar zxf libpng-1.0.10rc1.tar.gz
[Root]# cd libpng-1.0.10rc1
Libpng 不提供有效的 configure 脚本,所以只好自己动手改 Makefile 文件
[Root]# cp scripts/makefile.linux Makefile //把 Scripts 下的一个 makefile 拷出来自己动手改
[Root]# vi Makefile // 自己动手改
CC=mipsel-linux-gcc //修改这里
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
prefix=/usr/tools/mipsel-linux //修改这里
# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/usr/tools/mipsel-linux/lib //修改这里
ZLIBINC=/usr/tools/mipsel-linux/include //修改这里
好了,保存,然后去编译吧
[Root]# make
[Root]# make install
如果有错误,检查你前面的步骤哪个没做对, 尤其是 zlib 的安装
还是前面说的,检查 /usr/tools/mipsel-linux/ [include,lib] 目录中有成功安装否,如果没有安装成功,那就自己把编译出来的东西拷过去。记着,*.h 和 .so 的文件都要拷。
现在来安装 jpeg 库
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
[Root]# tar zxf jpegsrc.v6b.tar.gz
[Root]# cd jpeg-6b
一般情况下用
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ --host=mipsel-linux --enable-shared --enable-static
--host=mipsel-linux 来指定交叉编译选项,可是这里好象有点问题,可改用
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ CC=mipsel-linux-gcc --enable-shared --enable-static
[Root]# make
[Root]# mkdir –pv /usr/tools/mipsel-linux/man/man1
[Root]# make install
如上,检查一下安装是否成功。
最后安装 libttf 库,这个是 TrueType 字体的支持库,用来显示文字的。
http://nchc.dl.sourceforge.net/sourcefo...pe-1.3.1.tar.gz
注意:MiniGUI只支持 1.3.1 版本的 ttf 库
[Root]# tar zxf freetype-1.3.1.tar.gz
[Root]# cd freetype-1.3.1 //进到目录里去
[Root]# mkdir –p /opt/nc/libttf/extend // 自己另外建立一个目录
[Root]# cp lib/* lib/arch/ansi/* ../libttf/ //把有用的东西拷出来
[Root]# cp lib/extend/* ../libttf/extend/ 把 extend 目录下的文件也拷出来
[Root]# cd libttf
[Root]# mipsel-linux-gcc -c -fPIC -O2 freetype.c
[Root]# mipsel-linux-gcc -c -fPIC -O2 -I./ extend/*.c 把 extend 下所有的 .c 文件全部编译
[Root]# mipsel-linux-gcc --shared -o libttf.so *.o 生成最后的动态链接库
现在手动安装
[Root] mkdir –p /usr/tools/mipsel-linux/include/freetype1/freetype
[Root] cp *.h extend/*.h /usr/tools/mipsel-linux/include/freetype1/freetype
[Root] cp libttf.so /usr/tools/mipsel-linux/lib
安装库完成
MiniGUI 1.3.3 版本在链接 ljpeg lpng lttf 时老是要链接 /usr/lib 下的库,没办法,用老方法
[Root]# cd /usr/lib
[Root]# mv libjpeg.so libjpeg.so_back
[Root]# ln –s /usr/tools/mipsel-linux/lib/libjpeg.so ./libjpeg.so //指向 mipsel 的库
[Root]# mv libpng.so libpng.so_back
[Root]# ln –s /usr/tools/mipsel-linux/lib/libpng.so ./libpng.so
[Root]# mv libttf.so libttf.so_back
[Root]# ln –s /usr/tools/mipsel-linux/lib/libttf.so ./libttf.so
完成以上工作后就可以编译 libminigui 了
[Root]# cd libminigui-1.3.3
[Root]# make menuconfig
如果在 make menuconfig 出错,去检查一下你的 gcc ,前面我们把它指向 mipsel-linux-gcc 如果没改回来,这里会出错。
下面是配置libminigui
在 System Wide Options 里如下:
[*] Build MiniGUI-Lite //用 Lite 方式编译,不是Thread 方式,这里适用于 PDA
[ ] Stand-Alone
[ ] Use incore (built-in) resource //建议不要选这个,老有问题
[*] Unit of timer is 10ms
[*] Cursor support
[ ] User can move window with mouse //建议别选这个,可以移动蛮烦人的
[*] Mouse button can do double click
[*] Build with debugging messages
[ ] Trace messages of MiniGUI //不要选这个,出来的Trace太多,看不过来
[*] Include symbol name of messages
在 GAL engine Options 里
(NEWGAL) GAL and its engines
[*] NEWGAL engine on Linux FrameBuffer console
[ ] NEWGAL engine on Qt Virtual FrameBuffer //建议不要选这个,不然老让你用qvfb
[ ] NEWGAL engine on eCos LCD interface
[*] Dummy NEWGAL engine
[*] Have console on Linux FrameBuffer
在 IAL engine options 里
[ ] EP7211-based board
[ ] ADS Graphics Client
[ ] iPAQ H3600 (also H3800)
[ ] MPC823
[ ] PX255B
[ ] NEC VR4181
[ ] Helio Touch Panel
[ ] MT T800
[ ] SMDK2410 Touch Screen
[ ] uClinux Touch Screen Palm/MC68EZ328
[*] Dummy IAL engine
[*] Native (console) input engine
--- Native IAL engine subdriver options
[*] PS2 mouse /可选可不选
[*] IntelligentMouse (IMPS/2) mouse /NC用的USB鼠标协议
[ ] MS mouse
[ ] MS3 mouse
[*] GPM daemon
在 Font Option 里
[*] Raw bitmap font
[ ] Var bitmap font //千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误
[*] Incore font sansserif
[*] Incore font courier
[*] Incore font symbol
[*] Incore font vgas
[*] Qt Prerendered Font
[*] TrueType font
[ ] Adobe Type1 font
在 Image Options 里
[*] Includes SaveBitmap-related functions
[ ] PCX file support
[ ] LBM/PBM file support
[ ] TGA file support
[*] GIF file support
[*] JPG file support
[*] PNG file support
在 Input Medthold Option 里
[*] IME (GB2312) support
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个, mginit 程序一启动就崩溃了(Abort ,有点像 OOP一样,显示所有的寄存器的值,然后Abort)
在 Development Environment Option 里
(Linux) Platform
(mipsel-linux-gcc) Compiler //注意这里
(glibc) Libc //注意这里
--- Installation options
Path prefix: "/usr/tools/mipsel-linux" //注意这里,我们把库装到交叉编译器的目录下
--- Additonal Compiler Flags
CFLAGS: ""
LDFLAGS: ""
其它的用缺省的选项就可以了,现在退出,保存你的设置吧,然后它就开始检测你的系统了,注意下面的输出:
*****************************************************************************************
checking for FrameBuffer console support... yes
checking for TT_FreeType_Version in -lttf... yes //True Type字体
checking for jpeg_std_error in -ljpeg... yes // jpeg 支持
checking for png_check_sig in -lpng... yes //png 图形支持
checking for pow in -lm... yes
这里的库应该都是显示为 yes 了,如果有 no 的话,回去检查前面你有哪步做得不对,不然的话编译后的东西可能没法正常执行
如果你用的不是redhat 9.0的完全安装系统,到这步很有可能出现freetype/jpeg/png不支持,已知情况有,debian可能不支持freetype,FC5在PC安装检测就无法通过,FC3 JPEG不支持。强烈建议使用完全的RH9,这样可以使你省去非常多的麻烦。
*****************************************************************************************
如果这里通过了,就继续
[Root]# make
期间有几次错误出现,得手动修改
fbvideo.c: In function `FB_VideoInit':
fbvideo.c:715: error: `PAGE_SIZE' undeclared (first use in this function)
fbvideo.c:715: error: (Each undeclared identifier is reported only once
fbvideo.c:715: error: for each function it appears in.)
make[4]: *** [fbvideo.lo] 错误 1
make[4]: Leaving directory `/opt/libminigui-1.3.3/src/newgal/fbcon'
make[3]: *** [all-recursive] 错误 1
make[3]: Leaving directory `/opt/libminigui-1.3.3/src/newgal'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/opt/libminigui-1.3.3/src'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/opt/libminigui-1.3.3'
make: *** [all] 错误 2
PAGE_SIZE在page.h中定义,在交叉编译器的asm目录下确实存在,进入page.h中查看了代码,发现有两个ifdef可能让里面的PAGE_SIZE定义无法被外面读取,注释这两个条件编译后还是不行,试了很多方法都没成功,只好直接在fbvideo.c中直接定义了PAGE_SIZE为4K
*******
另外在stretch.c:265:47: missing terminating " character
stretch.c:267:25: missing terminating " character
删掉 " " 之间的TAB就OK了
*******
/usr/tools/mipsel-linux/bin/ld: template.lo: Relocations in generic ELF (EM: 3)
template.lo: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[3]: *** [libminigui.la] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
找到template.c/h的文件夹,删除里面的template.lo,继续make
*******
[Root]# make install
装好了,到 /usr/tools/mipsel-linux 的 include lib 目录下去看看,是不是多了相应的 libminigui.so libmgext.so libvcongui.so 在 include 目录下多了一个 minigui 目录,里面有相应的头文件
最后,安装 popt 库,这个库在编译 mde 程序时需要使用,不然编译没法通过
http://gd.tuwien.ac.at/utils/rpm.org/di...popt-1.7.tar.gz 我是从这里下载的
[Root]# tar zxf popt-1.7.tar.gz
[Root]# cd popt-1.7
[Root]# ./configure --prefix=/usr/tools/mipsel-linux/ --host=mipsel-linux --enable-shared --enable-static
[Root]# make
[Root]# make install
下面把 minigui 移植到板子上
/opt 目录下建立了一个 rootfs 目录,即 /opt/rootfs ,用来建立我根目录,现在我需要把 minigui 的库文件放到里面去,
建立目录
[Root]# mkdir –p /opt/rootfs/usr/local/[lib,etc]
把 /usr/tools/mipsel-linux/lib 中相应的库拷到 /opt/rootfs/usr/local/lib 目录下去
libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so
libjpeg.la libmgext-1.3.so.3.0.0 libminigui.la libpng.so.2.1.0.10rc1 libttf.so libz.so.1
libjpeg.so libmgext.a libminigui.so libpopt.a libvcongui-1.3.so.3 libz.so.1.2.3
libjpeg.so.62 libmgext.la libm.so libpopt.la libvcongui-1.3.so.3.0.0 minigui
libjpeg.so.62.0.0 libmgext.so libm.so.6 libpopt.so libvcongui.a shared
libm-2.2.3.so libminigui-1.3.so.3 libpng.a libpopt.so.0 libvcongui.la
libm.a libminigui-1.3.so.3.0.0 libpng.so libpopt.so.0.0.0 libvcongui.so
同时修改 /opt/rootfs/etc/ld.so.conf,在里面最后新加入一行 /usr/local/lib
然后执行 [Root] ldconfig –r /opt/rootfs //把 rootfs 当成根目录,执行
OK,库文件准备完毕
下面把资源文件也拷过来,在前面搭建 PC 环境中的资源文件,它被装在了 /usr/local/lib 目录下,一个叫 minigui 的目录,我们要做的就是把它拷过来
[Root]# cp –r –a /usr/local/lib/minigui /opt/rootfs/usr/local/ 连目录一起拷过来,目录结构和主机一样
把配置文件也拷过来
[Root]# cp /usr/local/etc/MiniGUI.cfg /opt/rootfs/usr/local/etc/ 记住,保持目录结构的一致
修改 MiniGUI.cfg ,如下
[system]
# GAL engine
gal_engine=fbcon //这里修改
# IAL engine
ial_engine=console
mdev=/dev/input/mice //鼠标
mtype=IMPS2
[fbcon]
defaultmode=640x480-16bpp // 设置错误minigui 就启动不了
3.启动你的 MiniGUI 的图形界面
[Root]# tar zxf mde-1.3.0.tar.gz
[Root]# cd mde-1.3.0
//我们先对 mginit 程序做一点小修改,呵
[Root]# cd mginit ; vi mginit.c
在 297 行处,把下面代码注释掉
/***************
AboutMiniGUI ();
AboutMDE ();
**************/
保存,退出即可。
因为我们没有 触摸屏 现在,没法点它的 确认 按钮,所以把这些 About 信息去掉
好了,现在来编译吧,在mde-1.3.0 目录里
[Root]# ./configure --prefix=/opt/rootfs/usr/local --host=mipsel-linux
[Root]# make
如果你发现 mginit 目录下的程序没有被编译,那就说明你的 libminigui 配置不正确,记住,你必须是配置为 Lite 模式,这个程序才会被编译
[Root]# make install
事实上证明,make install,根本没用,它什么都没做,所以还是自己动手来做
[Root]# mkdir –p /opt/rootfs/usr/local/lib/shared/miniguiapps
[Root]# cp –r –a mde-1.3.0/* /opt/rootfs/usr/local/lib/shared/miniguiapps
直接全部拷过去,然后到 /opt/rootfs/usr/local/lib/shared/miniguiapps 的各个程序目录下去,比如 mginit , bomb , painter 之类的,把不用的 .c .h .o Makefile 之类的全删除掉,保留 可执行文件和相应的 res 目录下的资源
OK,最后一步了,修改配置文件
[Root]# mkdir -p /nfsroot/au
[Root]# tar zxvf au.xxxx.tar.gz(NC的文件系统包) -C /nfsroot/au
[Root]# cd /opt/rootfs
[Root]# cp -a * /nfsroot/au
[Root]# vi /opt/rootfs/etc/rc.d/rc.sysinit
注释了最后面一行的./startx &
加入
cd /usr/local/lib/shared/miniguiapps/mginit
./mginit
注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误
“ Can not attach shared resource ! ”
[Root]# mipsel-linux-gcc –O2 –o helloword helloword.c –lminigui –lmgext
[Root]# mv helloword /nfsroot/au/
板子起来后,就可以在根目录下执行应用程序了
4.一些常见的问题
问题1:在板子上跑的程序都显示 can not find qvfb … 之类,可是我只是想让它在板子上跑在 FrameBuffer 之上啊?
解决:在编译 libminigui 的时候,把
[ ] Use incore (built-in) resource //建议不要选这个,老有问题
[ ] NEWGAL engine on Qt Virtual FrameBuffer //建议不要选这个,不然老让你用qvfb
问题2:编译的时候老出现 unreferenced to vbf_Courier8x8() 之类的问题
解决:
[ ] Var bitmap font //千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误
问题3:一切都搞定了,可是执行 mginit() 的时候就崩溃了,把所有的寄存器值打印了出来,然后显示了个 Abort() 就退出了!
解决:
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了
问题4: 为什么我执行 helloword 就显示 “Can not attach shared resource!”
解决:
注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误
“ Can not attach shared resource ! ”
问题5:怎么把自己的程序加到 minigui 的 taskbar 上去,并且排在前面??
解决:
查看 mginit 目录下的 mginit.rc 文件,里面就是配置
问题6:为什么我的程序显示 can not find libminigui.so ??
解决:你是否忘了在 etc/ld.so.conf 中加入 /usr/local/lib ,并且执行 ldconfig 程序? 看前面说的方法
问题7:在板子上起来有step1 - step 9的错误发生
解决:修改vi /nfsroot/au/usr/local/etc/MiniGui.conf,这个文件中有很多资源的位置不对,把路径对应好就可以了
编译过程中的错误
The server encountered a temporary error and could not complete your request
Error in step 9: Can not initialize low level event!
报错
IAL Native Engine: Can not init mouse!
IAL : Init IAL engine failure.
Error in step 9: Can not initialize low level event!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
上网看说是鼠标权限不够,好吧
mknod /dev/psaux c 10 1
ln -sv /dev/psaux /dev/mouse
可以解决问题。
出现错误
GDI: Error in loading raw bitmap fonts!
GDI: Can not initialize raw bitmap fonts!
Error in step 4: MiniGUI: Initialization of GDI resource failure!
IAL: Use Console engine.
IME: Loading Input Method 0: pinyin
Can not create task bar.
应该存在这个文件
/usr/local/lib/minigui
需要将
/usr/local/minigui 拷贝到/usr/local/lib/下可以消除这个错误
AttachSharedResource: Invalid argument
Error in step 7: can not attach shared resoure!
错误:
图形启动后出现Create Terminal error!的错误即不能创建虚拟终端的情况是由于没有
/dev/ptysf设备节点的原因,同时需要内核支持老的伪终端机制
创建设备节点
mknod /dev/ptysf c 2 63
交叉编译应用程序,设定交叉编译的库文件和库文件路径 -L/usr/tools/lib -I/usr/tools/include/
mipsel-linux-gcc –O2 –o helloword helloword.c -L/usr/tools/lib -I/usr/tools/include/ –lminigui –lmgext