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程序。