您好,欢迎来到欧得旅游网。
搜索
您的当前位置:首页Ubuntu下MiniGUI3.0.12安装与移植

Ubuntu下MiniGUI3.0.12安装与移植

来源:欧得旅游网
MiniGUI3.0.12及组件下载地址http://www.minigui.org/downloads/index.html libmgplus-1.2.4下载地址http://download.csdn.net/download/yong_f/4062807 1. 需要下载的组件

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 那么配置的时候加上这个选项就OK了。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务