Minigui3.0.12移植到nuc951上
一环境
开发环境:fedora9
运行环境:
Nuc951evb板子,nuc951bsp(linux2.6.35.4 kernel)
u-boot引导从Nandflash启动
编译器:arm-linux-gcc 4.3.4(nuc951bsp中自带)
二下载源文件
移植所需的文件可以从minigui官网下载:http://www.minigui.org/en/download/
主要文件有:
工具及依赖库文件:
qvfb2-2.0.tar.gz
gvfb-1.0.0.tar.gz
zlib-1.2.2.tar.gz
libpng-1.2.37.tar.gz
jpegsrc.v7.tar.gz
freetype-2.3.9-fm20100818.tar.gz
minigui文件
libminigui-gpl-3.0.12.tar.gz
minigui-res-be-3.0.12.tar.gz
mg-samples-3.0.12.tar.gz
minigui组件文件
libmgi-2.0.4.tar.gz
libmgplus-1.2.4.tar.gz
libmg3d-1.0.2.tar.gz
libmgutils-1.0.4.tar.gz
libmgp-1.2.2.tar.gz
libmgncs-1.0.8.tar.gz
libmgeff-1.0.0.tar.gz
建一个目录minigui,把上述文件都下载到该目录下.
三准备目录
在minigui下建一个目录arm,用于保存arm下的编译相关文件.
建立安装目录/opt/minigui,并更改目录权限
#mkdir /opt/minigui
#chmod 777 /opt/minigui
#cd arm
四依赖库文件编译
1 libz 库编译
Nuc951的交叉编译器本身含有libz库,可以不编译,直接使用编译的libz库。
2 安装libjpeg库
交叉编译器本身含有jpeg库,也可以不编译直接使用。
如果要编译,编译如下:
# tar zxvf ../jpegsrc.v7.tar.gz
#cd jpeg-7
# ./configure CC=arm-linux-gcc --target=arm-linux --host=arm-linux prefix=/opt/minigui
#make
#make install
3. 编译安装libpng库
# tar zxvf ../libpng-1.2.37.tar.gz
#cd libpng-1.2.37
# ./configure CC=arm-linux-gcc --target=arm-linux --host=arm-linux prefix=/opt/minigui
#make
#make install
4 编译安装libttf库
# tar zxvf ../freetype-2.3.9-fm20100818.tar.gz
# cd freetype-2.3.9-fm20100818
# ./configure CC=arm-linux-gcc --target=arm-linux --host=arm-linux prefix=/opt/minigui
#make
#make install
五minigui编译安装
1 安装资源文件minigui-res-be-3.0.12.tar.gz
# tar zxvf ../minigui-res-be-3.0.12.tar.gz
# cd minigui-res-be-3.0.12
#./configure CC=arm-linux-gcc --target=arm-linux --host=arm-linux prefix=/opt/minigui
#make install
2 编译安装libminigui
# tar zxvf ../libminigui-gpl-3.0.12.tar.gz
#cd libminigui-gpl-3.0.12
./configure \
--prefix=/opt/minigui/ \
--host=arm-linux \
--target=arm-linux \
--with-osname=linux \
--with-targetname=fbcon \
--enable-autoial \
--enable-tslibial \
--disable-vbfsupport \
--disable-pcxvfb \
CC=arm-linux-gcc \
CFLAGS='-I/opt/minigui/include' LDFLAGS='-L/opt/minigui/lib'
配置时会出现如下错误
Going to generate license pictures ...
./configure: line 15530: ./runme.sh: No such file or directory
WARNING: failed to generate license pictures.
不用理会它,继续。
#make
#make install
六编译安装minigui组件
1 编译安装libmgi
# tar zxvf ../libmgi-2.0.4.tar.gz
# cd libmgi-2.0.4
./configure --prefix=/opt/minigui/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm'
#make
出现如下错误
错误1:
ime_pinyin.c: In function 'pinyin_predict_pord':
ime_pinyin.c:334: warning: incompatible implicit declaration of built-in function 'bzero'
ime_pinyin.c: In function 'char_match_exist':
ime_pinyin.c:430: warning: incompatible implicit declaration of built-in function 'bzero'
ime_pinyin.c: In function 'pinyin_match_keystokes':
ime_pinyin.c:534: warning: incompatible implicit declaration of built-in function 'bzero'
错误2
../src/.libs/libmgi.so: undefined reference to `bcmp'
原因:交叉编译器已经不支持bzero,bcmp了需要memset和memcmp替换。
找到ime_pinyin.c在文件中增加
#define bzero(s,y) memset((s), 0, (y))
#define bcmp memcmp
再次编译:
#make
编译通过
然后安装:
#make install
2 编译安装libmgplus-1.2.4.tar.gz
# tar zxvf ../libmgplus-1.2.4.tar.gz
# cd libmgplus-1.2.4
# ./configure --prefix=/opt/minigui/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm'
#make
#make install
3 编译安装libmg3d-1.0.2.tar.gz
# tar zxvf ../libmg3d-1.0.2.tar.gz
# cd libmg3d-1.0.2
# ./configure --prefix=/opt/minigui/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm'
#make
#make install
4 编译安装libmgutils-1.0.4.tar.gz
# tar zxvf ../libmgutils-1.0.4.tar.gz
# cd libmgutils-1.0.4
# ./configure --prefix=/opt/minigui/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm'
#make
出现错误
vc.c: In function 'TextDeleteChar':
vc.c:171: warning: implicit declaration of function 'bzero'
vc.c:171: warning: incompatible implicit declaration of built-in function 'bzero'
vc.c: In function 'TextInsertChar':
vc.c:201: warning: incompatible implicit declaration of built-in function 'bzero'
vc.c: In function 'TextClearEol':
vc.c:376: warning: incompatible implicit declaration of built-in function 'bzero'
vc.c: In function 'TextClearEos':
vc.c:408: warning: incompatible implicit declaration of built-in function 'bzero'
vc.c: In function 'TextClearChars':
vc.c:468: warning: incompatible implicit declaration of built-in function 'bzero'
解决方法同上
找到vc.c文件,添加
#define bzero(s,y) memset((s), 0, (y))
错误
child.c: In function 'ChildStart':
child.c:116: warning: implicit declaration of function 'rindex'
child.c:116: warning: incompatible implicit declaration of built-in function 'rindex'
../../src/.libs/libmgutils.so: undefined reference to `rindex'
找到文件picview.c和child.c文件分别添加
# define rindex(s,c) strrchr((s), (c))
再次编译
#make
编译通过
#make install
5 编译安装libmgp-1.2.2.tar.gz
# tar zxvf ../libmgp-1.2.2.tar.gz
# cd libmgp-1.2.2
# ./configure --prefix=/opt/minigui/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm'
#make
#make install
6 编译安装libmgncs-1.0.8.tar.gz
# tar zxvf ../libmgncs-1.0.8.tar.gz
# cd libmgncs-1.0.8
# ./configure --prefix=/opt/minigui/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm'
#make
#make install
7 编译安装libmgeff-1.0.0.tar.gz
由于是用cmake做的,暂时没有研究。
七编译sample程序
# tar zxvf ../mg-samples-3.0.12.tar.gz
# cd mg-samples-3.0.12
#./configure --prefix=/opt/miniguiarm/ --host=arm-linux --target=arm-linux CC='arm-linux-gcc -D_XOPEN_SOURCE' LDFLAGS='-L/opt/minigui/lib' CPPFLAGS='-I/opt/minigui/include' MINIGUI_CFLAGS='-L/opt/minigui/lib' MINIGUI_LIBS='-ldl -lminigui_ths' LIBS='-ljpeg -lpng -lpthread -lm -lts'
#make
八安装minigui到nuc951
1安装minigui库文件及资源文件到nuc951文件系统
压缩编译好的文件
假定文件系统放在rootfs下:
#mkdir opt
#mkdir opt/minigui
#cd opt/minigui
#cp –arf /opt/minigui/lib ./
#cp -rf /opt/minigui/share ./
删除静态库文件
# cd lib
#rm *.a
2 将库文件路径加入到系统库搜索路径
在etc/profile文件中添加
export MINIGUIDIR=/opt/minigui
export LD_LIBRARY_PATH=$MINIGUIDIR/lib:$LD_LIBRARY_PATH
3. 安装MiniGUI.cfg
MiniGUI.cfg
This configuration file must be installed in /etc, /usr/local/etc or your home directory.
我们这里把它安装在/etc下,复制MiniGUI.cfg到rootfs/etc下
修改MiniGUI.cfg
修改MiniGUI.cfg先调试GAL engine,调试完成后再调试IAL engine,修改如下:其他默认:
# GAL engine
gal_engine=fbcon //修改再这里
# IAL engine
ial_engine=dummy //修改再这里
mdev=none //修改再这里
mtype=none //修改再这里
[fbcon]
defaultmode=320x240-16bpp //修改再这里,nuc951evb的lcd是320x240
[cursorinfo]
# Edit following line to specify cursor files path
cursorpath=/opt/minigui/share/minigui/res/cursor/ //修改这里,指向cursor目录
[resinfo]
respath=/opt/minigui/share/minigui/res/ //修改这里,指向资源目录
ial engine选用tslib需要修改
ial_engine=tslib //修改这里,ial engine
mdev=/dev/input/event0 //修改这里
mtype=IMPS2
4 复制demo程序到nuc951文件系统的usr目录下
需要注意的问题是复制时demo程序的res目录也要与程序文件一起复制并到同一个目录下,否则会有问题。
5 制作文件系统,并下载到nuc951evb板, 运行demo程序。