libminigui-gpl-3_0_12.tar.gz mg-samples-3_0_12.tar.gz freetype-1_3_1.tar.gz jpegsrc_v7.tar.gz libpng-1_2_37.tar.gz
minigui-res-be-3_0_12.tar.gz zlib-1_2_2.tar.gz qvfb2-2.0
libmgplus-1.2.4(可以在csdn上下载到)
(qvfb所需要的包) libqt3-mt libqt3-mt-dev alien
qt-devel-3.3.8-4.fc7.i386.rpm
2.安装各组件
<1>libminigui-gpl-3_0_12.tar.gz(库)
./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo make
sudo make install
<2>minigui-res-be-3_0_12.tar.gz(资源包) ./configure --prefix=/usr/local sudo make
sudo make install
<3>freetype-1_3_1.tar.gz ./configure --prefix=/usr/local sudo make
sudo make install (
在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的 Print_Mem( memory_footprint.##field, string )
改为 : Print_Mem( memory_footprint.field, string )
#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )
修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field ) )
<4>安装PNG库
./configure --prefix=/usr/local sudo make
sudo make install
<5>安装JPEG库
./configure --prefix=/usr/local --enable-shared sudo make
sudo make install
<6>安装zlib库
./configure --prefix=/usr/local sudo make
sudo make install
<7>libmgplus-1.2.4
./configure --prefix=/usr/local sudo make
sudo make install
将/usr/local/lib加入到.bashrc中
<8>安装qvfb2
(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载
qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包)
sudo apt-get install libqt3-mt sudo apt-get install libqt3-mt-dev sudo apt-get install alien
sudo alien qt-devel-3.3.8-4.fc7.i386.rpm
dpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb (开始安qvfb) cd qvfb2-2.0
./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3 sudo make
sudo make install
(qvfb2与1不同,没有文件输入是不会显示出框图的)
<9>修改MiniGUI.cfg [system]
# GAL engine and default options gal_engine=pc_xvfb(修改此处)
defaultmode=640x480-16bpp(修改此处)
# IAL engine ial_engine=qvfb
mdev=/dev/input/mice mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp
window_caption=QVFB-for-MiniGUI-3.0 exec_file=/usr/local/bin/qvfb display=0
#{{ifdef _MGGAL_PCXVFB [pc_xvfb]
defaultmode=640x480-16bpp
window_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version) exec_file=/usr/local/bin/qvfb2(修改此处) display=0 #}}
<10>mg-samples-3.0.12 并运行 ./configure --prefix=/usr/local sudo make
sudo make install ./same/same
问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62 原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对 解决办法:将 /usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向 libjpeg.so.7.0.0 然后修改 /usr/include/jpeglib.h 中的版本号为 70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)
(关于miniGUI在2440上的移植会在下篇更新)
以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自http://www.100ask.net/forum/showtopic-3899.aspx
采用交叉编译方式 【软件环境】 PC:ubuntu 10.04
开发板:Linux 2.6.32.2@2440 Target: arm-none-linux-gnueabi gcc version 4.4.3
编译minigui3.0并移植需要的文件有
(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本): FreeType库: minigui字体引擎
freetype-1_3_1.tar.gz
JPEG库:
minigui显示jpeg图片 jpegsrc.v8c.tar.gz
png库:
minigui显示png图片
libpng-1.0.59.tar.gz
zlib库:
minigui数据压缩函数库 zlib-1.2.6.tar.gz
minigui所用到的资源
minigui-res-be-3_0_12.tar.gz
minigui核心库
libminigui-gpl-3_0_12.tar.gz
minigui样例
mg-samples-3_0_12.tar.gz Step1:
建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压 tar xzf freetype-1_3_1.tar.gz tar xzf jpegsrc.v8c.tar.gz tar xzf libpng-1.0.59.tar.gz tar xzf zlib-1.2.6.tar.gz
tar xzf minigui-res-be-3_0_12.tar.gz tar xzf libminigui-gpl-3_0_12.tar.gz tar xzf mg-samples-3_0_12.tar.gz Step2:
[编译Freetype库] cd freetype-1.3.1/
(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui
修改Makefile
第12行 all: ttlib ttest ttpo为all: ttlib ttpo
第34行 注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误
ftdump.c:172:1: error: pasting \".\" and \"glyph_object\" does not give
a valid preprocessing token
ftdump.c:182:1: error: pasting \".\" and \"first_instance\" does not give a valid preprocessing token
ftdump.c:191:1: error: pasting \".\" and \"second_instance\" does not give a valid preprocessing token
ftdump.c:201:1: error: pasting \".\" and \"face_object\" does not give a valid preprocessing token
ftdump.c:202:1: error: pasting \".\" and \"glyph_object\" does not give a valid preprocessing token
ftdump.c:203:1: error: pasting \".\" and \"second_instance\" does not give a valid preprocessing token (B)make
(C)make install
[编译JPEG库] cd jpeg-8c/
(A)修改configure(vi configure)在文件开始的位置加上 CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
如(后面的库的编译修改configure亦如此): ## M4sh Initialization. ## ## -------------------- ##
# Be more Bourne compatible C=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
DUALCASE=1; export DUALCASE # for MKS sh
if test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
(B)./configure --prefix=/usr/local/minigui --build=i386-linux \\ --host=arm-linux --target=arm-linux --enable-shared (C)make
(D)make install
[编译PNG库]
cd libpng-1.0.59/
(A)修改configure(vi configure)在文件开始的位置加上 CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
(B)./configure --prefix=/usr/local/minigui --build=i386-linux \\ --host=arm-linux --target=arm-linux (C)make
(D)make install
[编译zlib库] cd zlib-1.2.6/
(A)修改configure(vi configure)在文件开始的位置加上 CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
(B)./configure --prefix=/usr/local/minigui --shared (C)make
(D)make install
[编译资源库]
cd minigui-res-be-3.0.12/
(A)修改configure(vi configure)在文件开始的位置加上 CC=arm-linux-gcc
CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
(B)./configure --prefix=/usr/local/minigui (C)make
(D)make install
[编译核心库]
cd libminigui-gpl-3.0.12/
(A)修改configure(vi configure)在文件开始的位置加上 CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
CFLAGS=\"-I/usr/local/minigui/include
-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include \" CPPFLAGS=\"-g -I/usr/local/minigui/include
-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include \" CXXFLAGS=\"-g -I/usr/local/minigui/include
-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include \"
(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)
(B)./configure --prefix=/usr/local/minigui --host=arm-linux \\ --target=arm-linux --build=i386-linux --with-osname=linux \\ --with-style=classic --with-targetname=fbcon --enable-autoial \\ --enable-rbf16 --disable-vbfsupport --enable-tslibial
(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到) (C)make
(D)make install
[编译示例库]
cd mg-samples-3.0.12/
(A)修改configure(vi configure)在文件开始的位置加上
CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AS=arm-linux-as AR=arm-linux-ar
CFLAGS=\"-I/usr/local/minigui/include
-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include \" CPPFLAGS=\"-g -I/usr/local/minigui/include
-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include \" CXXFLAGS=\"-g -I/usr/local/minigui/include
-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include \" (B)./configure --prefix=/usr/local/minigui --build=i386-linux \\ --host=arm-linux --target=arm-linux (C)make
这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?
查看根目录下的Makefile(vi Makefile),(line 204)会发现:
COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \\ lf_skin font_text look_feel dbuff notebook
same graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
这么多示例程序,我们暂时只需要1个验证移植是否成功就好了。选个notebook先来编译吧。 a.
将notebook放到最前面,即
COMMON_SUBDIRS = notebook same graphics housekeeper minesweeper ctrl_dlg \\
lf_skin font_text look_feel dbuff 将LIBS修改为
LIBS = -lminigui_ths -ljpeg -lm -lpthread -ldl -lpng -lts LDFLAGS修改为
LDFLAGS = -L/usr/local/minigui/lib 保存Makefile b.
vi notebook/Makefile
将LIBS修改为
LIBS = -lminigui_ths -ljpeg -lm -lpthread -ldl -lpng -lts LDFLAGS修改为
LDFLAGS = -L/usr/local/minigui/lib c.
vi notebook/res/Makefile 将LIBS修改为
LIBS = -lminigui_ths -ljpeg -lm -lpthread -ldl -lpng -lts LDFLAGS修改为
LDFLAGS = -L/usr/local/minigui/lib
至此,编译过程完成了。 [拷贝]
(注:我用的NFS网络文件系统,路径为/home/profiles/2440/rootfs,注意环境差异) (A)拷贝刚刚编译完成的notebook到根文件系统的bin目录下
cp ./notebook/notebook /home/profiles/2440/rootfs/bin 此时并不能再开发板上运行,因为我们编译的各种库文件尚未拷贝过去
(B)拷贝编译生成的所有必需文件(拷贝到开发板根文件系统的usr/local目录) cp /usr/local/minigui/* /home/profiles/2440/rootfs/usr/local/ -dr vi /usr/local/etc/MiniGUI.cfg gal_engine=pc_xvfb defaultmode=800x600-16bpp # IAL engine ial_engine=pc_xvfb mdev=/dev/input/mice mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp 修改为:
gal_engine=fbcon
defaultmode=320x240-16bpp # IAL engine ial_engine=tslib mdev=/dev/input/event0
#/dev/input/event0为触摸屏设备节点,不同的驱动有所差异 mtype=IMPS2
[fbcon]
defaultmode=320x240-16bpp
(D)在rootfs下创建/etc/ld.so.conf,写入 /usr/local/lib /usr/lib /lib
(E)在虚拟机下执行ldconfig -r /home/profiles/2440/rootfs -r后面的目录是根文件系统所在目录 (F)修改启动脚本加上 vi /etc/init.d/rcS
/bin/ln –s/dev/vc/0/dev/tty0 否则会出现
NEWGAL>FBCON:Can't open/dev/tty0 : No such file or directory NEWGAL:Set video mode failure.
InitGUI:Can not initialize graphics engine! [测试]
(A)如果使用了Qtopia,杀掉原先的/opt/Qtopia/bin/qpe进程。 比如我的 ps命令
686 root 18248 S /opt/Qtopia/bin/qpe kill -9 686 (B)执行notebook &
现在可以编译一下其它的程序,可能有的有诸如这样的错误:
./graphics: symbol lookup error: /usr/local/lib/libminigui_ths-3.0.so.12: undefined symbol: ts_open
ts_open函数没发现,只是因为在编译核心库的时候,虽然加上了-lts,但是在/usr/local/minigui/lib中并没有tslib的库文件,
以上的操作的前提是编译过tslib,然后将所需要的库文件拷贝到/usr/local/minigui/lib重新编译一遍minigui核心库和示例库
这三个文件可以从开发板上拷贝到虚拟机上。
lrwxrwxrwx 1 root root 18 Oct 8 2011 /usr/local/lib/libts-0.0.so.0 -> libts-0.0.so.0.1.1
-rwxr-xr-x 1 root root 9612 Oct 8 2011 /usr/local/lib/libts-0.0.so.0.1.1
lrwxrwxrwx 1 root root 18 Oct 8 2011 /usr/local/lib/libts.so -> libts-0.0.so.0.1.1 看一下源码,为何知道要用触摸屏时,必须选上。 当用一个未知IAL引擎时,会提示
IAL: Does not find the request engine
搜索一下minigui核心库的代码,发现在src/ial/ial.c的mg_InitIAL函数中有这样的语句: if (__mg_cur_input == NULL) {
fprintf (stderr, \"IAL: Does not find the request engine: %s.\\n\engine); if (NR_INPUTS) {
__mg_cur_input = inputs;
fprintf (stderr, \"IAL: Use the first engine: %s\\n\__mg_cur_input->id); } else
return ERR_NO_MATCH; } 向上找到
for (i = 0; i < NR_INPUTS; i++) {
if (strncmp (engine, inputs.id, LEN_ENGINE_NAME) == 0) { __mg_cur_input = inputs + i; break; } }
用inputs.id和engine比较,再发现本文件中有inputs的定义 static INPUT inputs [] = {
/* General IAL engines ... */ #ifdef _MGIAL_QVFB
{\"qvfb\#endif 。。。
#ifdef _MGIAL_TSLIB
{\"tslib\
#endif 。。。 };
找到了,只有在_MGIAL_TSLIB被定义的时候才会有{\"tslib\, 后面两个是其相关的初始化、处理函数。
如果没有定义_MGIAL_TSLIB这个,在/usr/local/etc/MiniguiCFG里面的 ial_engine=tslib后面写了tslib也匹配不了。 那么,搜索一下在哪里定义_MGIAL_TSLIB
1. [/color][/size][/font][/i][/i][/size][/color][/i][/i][i][i][color=#000][size=
12px][i][i][font=Verdana][size=2][color=#444444][root: libminigui-gpl-3.0.12]# grep \"_MGIAL_TSLIB\" ./ -nrw
2. ./configure.in:1839: AC_DEFINE(_MGIAL_TSLIB, 1, 3. ./mgconfig.h:538:#define _MGIAL_TSLIB 1 4. ./confdefs.h:67:#define _MGIAL_TSLIB 1 5. ./mgconfig.h.in:537:#undef _MGIAL_TSLIB 6. ./config.status:940:D[\"_MGIAL_TSLIB\"]=\" 1\"
7. ./configure:13143:$as_echo \"#define _MGIAL_TSLIB 1\" >>confdefs.h 8. ./src/ial/ial.c:72:#ifdef _MGIAL_TSLIB 9. ./src/ial/ial.c:151:#ifdef _MGIAL_TSLIB 10. ./src/ial/tslibial.c:15:#ifdef _MGIAL_TSLIB 11. ./src/ial/tslibial.c:147:#endif /* _MGIAL_TSLIB */ 12. 注意到
13. ./configure:13143:$as_echo \"#define _MGIAL_TSLIB
1\" >>confdefs.h[/color][/size][/font][/i][/i][/size][/color][/i][/i] 14. [i][i][color=#000][size=12px][i][i][font=Verdana][size=2][color=#444444] 复制代码
猜测为当某个条件满足的时候就会将#define _MGIAL_TSLIB 1写到confdefs.h中。 查看一下./configure --help,发现了
--enable-tslibial build the IAL engine for TSLIB 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务