MiniGUI v1.3.3在PC上的配置和编译过程(常见问题解决方法)

想好好学学编程基础,先前安装了qt的开发环境,但是最终因为c++水平有限,决定先搞搞minigui的代码,就按着这个教材安装了个开发环境

花了我一晚上的时间

Minigui 算是我们中国人在世界软件界的骄傲了,作为中国人理应学它,虽然现在基本都用 QT 了。(关键是我的开发板只有 16M NORFLASH ,华恒的板子真会赚钱,故意留个 NANDFLASH 不给你焊接上去,唉这么小的 ROM 只能望 QT 兴叹了)不过 MiniGUI 做的不错,玩了玩他们自带的扫雷啥的小游戏,还挺爽的。

 

华恒的 S3C2440 的光盘里面已经讲交叉编译环境下的 Minigui 给你做的七七八八了。下面是华恒的交叉编译环境的搭建步骤

A .编译 minigui (在 libminigui-1.3.3 目录下操作)

B .编译 minigui 支持资源 (在 minigui-res-1.3.3 目录下操作)

C .编译 minigui 的示例程序 (在 mg-samples-1.3.1 mde-1.3.0 目录下操作)

D. 以上步骤编译出来的文件放到文件系统映像( ramdisk.image.gz )文件去

为了方便,我们上述目录和 nfsroot 目录都放入一个 HHTECH 字母打头脚本文件,执行相应脚本文件,就可以完成一系列的操作, 可以使用 vi 打开相关文件看看,所做的操作将在下面介绍移植过程作出介绍。

A. libminigui-1.3.3 目录下编写了 HHTECH.inst.lib 脚本文件,执行此文件就可以把 mingui 的库、包含文件等文件编译好,以便后面操作。

B. mingui-res-1.3.3 目录下编写了 HHTECH.inst 脚本文件,执行此文件,就可以把运行 minigui 示例程序时需要的相关资源拷贝到 /HHARM2440/applications/minigui-free/nfsroot 目录的相关目录下去。

C. mg-samples-1.3.1 mde-1.3.0 目录下编写了 HHTECH.compile.mg 脚本文件 , 执行此文件,在 mg-samples-1.3.1/src mde-1.3.0/bomb 目录及其它目录下就可以生成 minigui 的示例, mg-samples 目录下是一些简单的示例, mde-1.3.1 目录下是复杂一些的示例或应用程序。这些应用程序需要客户可以自行选择哪些拷贝到文件系统( ramdisk.imag.gz )中去。我们已经拷贝了 mg-samples-1.3.1/src/ 目录下的 treeview 到我们带的文件系统映像文件

 

不是用的华恒的板子的兄弟们也不用急,因为华恒只给了交叉编译环境的,为了开发方便,我们换需要搭建在 PC 环境下的 Minigui 。具体的移植搭建方法完全一样,只是用的编译工具不同,一个是 gcc 一个是 arm-linux-gcc

为了与交叉编译环境兼容,我选择了 minigui1.3.3 版本

 

那么开始移植吧:

 

1.       安装 Minigui

1 )首先下载 Minigui 的软件:

http://www.minigui.com/download/libminigui-1.3.3.tar.gz    

Minigui 的库文件

http://www.minigui.com/download/minigui-res-1.3.3.tar.gz  

minigui 所使用的资源,包括基本字体、图标、位图和鼠标光标     

这两个包的下载需要你在www.minigui.com     上注册过才可以下载,免费注册的,自己去下吧

http://www.minigui.com/downloads/minigui13/mde-1.3.0.tar.gz            图形界面程序

http://www.minigui.com/downloads/minigui13/mg-samples-1.3.0.tar.gz    

一些小例子

2 )下载支持的库文件

这里注意的是查看你的 linux 里面有没有 jpeg png ttf lz 这些库文件

可以利用解压缩 libminigui-1.3.3 下的 configture 进行验证:

     # tar  zxf  libminigui-1.3.3.tar.gz

    # cd libminigui-1.3.3

# ./configure                 

    注意看 configure 的信息,如果有:

   checking for FrameBuffer console support... yes

checking for pthread library... yes

checking for TT_FreeType_Version in -lttf... yes

checking for jpeg_std_error in -ljpeg... yes

checking for png_check_sig in -lpng... yes

   如果里面有“ no ”的话,不用编译了,先把相关的库装起来在编译 libminigui 。由于我的什么库都没有因此都要安装,下面详细介绍:

 

A :首先安装 zlib 库,这个是后面的库的编译基础。

http://www.zlib.net/zlib-1.2.3.tar.gz 

400 K ,去下载吧,

  

   保存到一个目录下后 (   /minigui)

# tar zxf zlib-1.2.3.tar.gz

   #  cd  / zlib-1.2.3

#  ./configure  --shared                   编译成动态库

#  make

# make install                             安装

 

B :安装 png

# tar zxf libpng-1.0.10rc1.tar.gz

# cd libpng-1.0.10rc1

Libpng 不提供有效的 configure 脚本,所以只好自己动手改 Makefile 文件了。可以把 Scripts  下的一个 makefile 拷出来自己动手改

# cp scripts/makefile.linux  Makefile  

   #  make

#  make install

 

C :安装 libjpeg-6b

tar xzvf jpegsrc.v6b.tar.gz

cd jpeg-6b

.   /configure --enable-static --enable-shared --prefix=/usr       // 关键这样才能生成要求的库文件

make

mkdir /usr/man/man1                 // 必须件这个文件夹否则安装出错

make install

 

D :安装 ttf

这个比较麻烦一点。

# tar zxf  freetype-1.3.1.tar.gz       // 老一套

# cd freetype-1.3.1   // 进到目录里去

# mkdir p  /opt/ libttf/extend   // 自己另外建立一个目录

# cp freetype-1.3.1/lib/*  freetype-1.3.1/lib/arch/ansi/*  libttf/  // 把有用的东西拷出来

#cp freetype-1.3.1/lib/extend/*  libttf/extend/    extend 目录下的文件也拷出来

                                          就是拷贝到自建的目录 /opt/ libttf/

注意 cp 命令不要用 r 选项,因为会把一些没用的东西出拷出来的

 

拷贝完成了,现在来自己手动编译了

 

# cd libttf

# gcc -c -fPIC -O2 freetype.c          // 不要奇怪,对,我们只要编译这一个 .c

// 因为它包括了其它所有的 .c 文件了,你可以自己查看它的内容   

# gcc -c -fPIC -O2 -I./  extend/*.c   extend 下所有的 .c 文件全部编译

# gcc --shared -o libttf.so  *.o    生成最后的动态链接库, OK

 

把编译好的东东拷贝到系统路径

 

mkdir –p /usr/local/ include/freetype1/freetype

 

cp *.h  extend/*.h   /usr/local/ include/freetype1/freetype

cp libttf.so  /usr/local /lib

 

安装库完成,哈!

 

 

3 )编译 libminigui-1.3.3

# tar  zxf  libminigui-1.3.3.tar.gz

    # cd libminigui-1.3.3

# ./configure                              // 这是应该全是 yes    

# make

# make install

4 )编译安装 minigui-res-1.3.3               // 不会有问题的

# tar  zxf  minigui-res-1.3.3

    # cd minigui-res-1.3.3

# ./configure                               

# make

# make install

 

 

5 )最后,安装 popt 库,这个库在编译 mde 程序时需要使用,不然编译没法通过 http://gd.tuwien.ac.at/utils/rpm.org/dist/rpm-4.1.x/popt-1.7.tar.gz    

#  tar zxf popt-1.7.tar.gz

# cd popt-1.7

# ./configure --enable-shared --enable-static

# make

# make install

 

6 )激活 FramebeBuffer

 

  这里很重要:

  # cd   /boot/grub

# vim menu.list

grub.conf 其实是 grub 引导程序 menu.lst 符号连接文件指向的引导菜单 , 再其中加

title MiniGUI FrameBuffer
root (hd0,0)
kernel /boot/vmlinuz-2.4.20-8 ro root="LABEL/" vga="0x0314" fb:on

意思是引导标题 MiniGUI FrameFuffer 模式 root 所在第一 IDE 硬盘的第一分区做为引导分区 kernel 内核的路径在 /boot 下名为 vmlinuz-2.4.20-8 的文件, ro 是以只读方式挂接 root="LABEL/vga"=0x0314 意为使用 800*600 的分辩率,如要使用 640*480 分辩率自行改为 vga=0x0311 使用 1024*768 分辩率请改为 vga=0x0317 , 后面的 fb:on 是关键 , 它就是打开内核 FrameBuffer 显示模式的关键参数 , 重新启动后你就可以看到屏幕左上角可爱的小启鹅了。

6 )修改 MiniGUI.cfg

MiniGUI 有两种执行方式,一个是利用 qvfb 开启模拟环境,他需要 X 图形支持,由于我的 linux 没有安装这些库,他们的以来关系有太复杂所以我没有选,选择了另一种更简单的方式就是在 Console 下在 Framebuffer 上执行,这种方式也带来很多麻烦,后面介绍。

 

修改 /usr/local/etc/MiniGUI.cfg 文件,如下

 

[system]

# GAL engine

gal_engine=fbcon

  // 这里修改

 

# IAL engine

ial_engine=console

  // 这里修改

 

mdev=/dev/mouse

mtype=none   // 这里改成 none ,因为经常鼠标不正常

 

[fbcon]

defaultmode=800x600-16bpp        // 与前面的 vga=0x0314 匹配

 

[qvfb]

defaultmode=640x480-16bpp    

display=0

 

重启动你的 RedHat 9 ,在出现 Grub 的时候按 E 键,在 kernel = ..      这一行的最后加入   vga=0x314  ,然后 Enter ,然后在 kernel=   这一行上按 b  就可以了,这时候可以在启动时看到一个小企鹅的图标, OK

 

7 )修改默认库路径

修改你的 /etc/ld.so.conf 文件,在里面最后新加入一行 /usr/local/lib

#  ldconfig

 

8 )编译例程

还记得前面让你下载的 mg-samples-1.3.0.tar.gz 这个包吧,这个就是一些例子,现在试试吧:

# tar zxf mg-samples-1.3.0.tar.gz

# ./configure

# make

# cd src

看看 src 目录下是不是已经编译出可执行文件来了

 

8 )运行程序

前面说采用 fbcon] 的方法不好,就在这里体现了,我在这里被卡了很久。一切 Minigui 的程序都不能在图形界面下运行,否则会冲突早成花屏,好像没有很多人提出这个解决方法,搞的的卡了很久,也许他们都用 qvfb 模式了吧。

解决方法就是进入纯字符模式:

可以按 ctrl+Alt+F5( 用虚拟机的兄弟注意:先把虚拟机的 参数 - à 热键 改成 ctrl+Alt+Shift 否则会冲突,不响应 )

在纯字符下我们可以运行刚才编译好的程序:

# cd …./mg-sample*

# cd /src

# ./helloworld

可以看到我们的程序跑起来。

 

 

另外回到图形界面可以使用指令:

# init 3   (进入字符界面是   #   init5

来回的切换非常慢,中间还要输入用户名和密码,大家可以参考别人的博客,移植 qvfb 模式。更方便。

我用的是ubuntu,grub没搞明白,就搞搞qvfb

 


Minigui在PC端编译和qvfb编译

步骤一:安装libminigui-1.3.3
linux:/home/work/minigui # cd libminigui-1.3.3/
linux:/home/work/minigui/libminigui-1.3.3 # make menuconfig
将“Font options”中的“Var bitmap font”选项去掉,否则报报下面错误一
linux:/home/work/minigui/libminigui-1.3.3 # make
linux:/home/work/minigui/libminigui-1.3.3 # make install
默认配置下将安装到/usr/local/目录下,可以在make menuconfig中修改“Development environment options”中的“Path prefix”来指定安装目录。如果使用其他目录,则需要注意相关的目录必须添加进环境PATH变量中,否则在编译MiniGUI应用程序时会出现找不到包含文件等错误信息。
接着要运行ldconfig加载新生成的链接库,否则将会出现类似找不到“libminigui-1.3.so.3”的错误消息。
出错记录:::
(1)
varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration

具体错误如下:
source='varbitmap.c' object='varbitmap.lo' libtool=yes /
        depfile='.deps/varbitmap.Plo' tmpdepfile='.deps/varbitmap.TPlo' /
        depmode=gcc3 /bin/sh ../../depcomp /
        /bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include    -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o varbitmap.lo `test -f 'varbitmap.c' || echo './'`varbitmap.c
rm -f .libs/varbitmap.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c varbitmap.c -MT varbitmap.lo -MD -MP -MF .deps/varbitmap.TPlo -fPIC -DPIC -o .libs/varbitmap.lo
varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration
varbitmap.h:38: error: previous declaration of 'var_bitmap_font_ops' was here
make[4]: *** [varbitmap.lo] 错误 1
make[4]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src/font'
make[3]: *** [all-recursive] 错误 1
make[3]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src/font'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3'
make: *** [all] 错误 2

出错原因:
在src/font/varbitmap.h中定义了extern FONTOPS var_bitmap_font_ops,那里var_bitmap_font_ops为extern类型的,而在src/font /varbitmap.c中定义的是static类型,所以可能造成了编译的出错。

解决方法如下:(1)
修改src/font/varbitmap.c文件:
//static FONTOPS var_bitmap_font_ops = {   
extern FONTOPS var_bitmap_font_ops = {    // wmmwang 修改
(2)
重新运行make menuconfig,将“Font options”中的“Var bitmap font”选项去掉即可:
  │ │
  • Raw bitmap font         │ │
      │ │ [ ] Var bitmap font         │ │
      │ │
  • Incore font sansserif   │ │
      │ │
  • Incore font courier     │ │
      │ │
  • Incore font symbol      │ │
      │ │
  • Incore font vgas        │ │
      │ │
  • Qt Prerendered Font     │ │
      │ │
  • TrueType font           │ │
      │ │
  • Adobe Type1 font        │ │
    (2)
    source='grid.c' object='grid.lo' libtool=yes /
            depfile='.deps/grid.Plo' tmpdepfile='.deps/grid.TPlo' /
            depmode=gcc3 /bin/sh ../../depcomp /
            /bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include    -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o grid.lo `test -f 'grid.c' || echo './'`grid.c
    rm -f .libs/grid.lo
    gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c grid.c -MT grid.lo -MD -MP -MF .deps/grid.TPlo -fPIC -DPIC -o .libs/grid.lo
    grid.c: In function 'AddCol':
    grid.c:626: error: invalid lvalue in assignment
    grid.c:627: error: invalid lvalue in assignment
    grid.c:640: error: invalid lvalue in assignment
    grid.c:641: error: invalid lvalue in assignment
    grid.c:669: error: invalid lvalue in assignment
    grid.c:670: error: invalid lvalue in assignment
    grid.c:682: error: invalid lvalue in assignment
    grid.c:683: error: invalid lvalue in assignment
    grid.c: In function 'AddRow':
    grid.c:735: error: invalid lvalue in assignment
    grid.c:736: error: invalid lvalue in assignment
    grid.c:747: error: invalid lvalue in assignment
    grid.c:748: error: invalid lvalue in assignment
    grid.c:776: error: invalid lvalue in assignment
    grid.c:777: error: invalid lvalue in assignment
    grid.c:790: error: invalid lvalue in assignment
    grid.c:791: error: invalid lvalue in assignment
    make[3]: *** [grid.lo] 错误 1
    make[3]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/ext/control'
    make[2]: *** [all-recursive] 错误 1
    make[2]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/ext'
    make[1]: *** [all-recursive] 错误 1
    make[1]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3'
    make: *** [all] 错误 2
    出错原因:
    未知。可能是编译器版本太高的缘故。
    解决方法如下:
    将上面出错的grid.c文件中对应行数的强制转换去掉。例如grid.c:626、627行修改如下:
          //(PGRIDCOLHDR)pCell1->pRowHdr = pRowHdr; // wmmwang 修改
          //(PGRIDCOLHDR)pCell1->pColHdr = pCol1;
          pCell1->pRowHdr = pRowHdr;
          pCell1->pColHdr = pCol1;
    其他出错行同上修改。
    步骤二:安装安装MiniGUI的资源包:
    linux:/home/work/minigui/libminigui-1.3.3 # cd ../
    linux:/home/work/minigui # cd minigui-res-1.3.3/
    linux:/home/work/minigui/minigui-res-1.3.3 # make install
    这一步一般不会出错
    步骤三:安装mg-samples-1.3.1
    linux:/home/work/minigui/qvfb-1.0 # cd ../mg-samples-1.3.1/
    linux:/home/work/minigui/mg-samples-1.3.1 # ./configure
    linux:/home/work/minigui/mg-samples-1.3.1 # make
    linux:/home/work/minigui/mg-samples-1.3.1 # make install
    出错记录:
    (3)
    . /usr/local/lib/libminigui.so: undefined reference to `pthread_kill_other_threads_np'
    原因:删除 MiniGUI 源代码中调用'pthread_kill_other_threads_np'这个函数
    的语句。应该在 src/kernel/init.c 文档中,也可以运行 grep 找一下这个函数。
    步骤四:安装综合例子mde-1.3.0
    linux:/home/work/minigui/qvfb-1.0  # cd ../mde-1.3.0/
    linux:/home/work/minigui/mde-1.3.0 # ./configure
    linux:/home/work/minigui/mde-1.3.0 # make
    linux:/home/work/minigui/mde-1.3.0 # make install
    步骤五:安装qvfb:
    linux:/home/work/minigui # cd minigui-res-1.3.3/
    linux:/home/work/minigui/minigui-res-1.3.3 # cd ../qvfb-1.0/
    linux:/home/work/minigui/qvfb-1.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
    (略过输出信息...)
    linux:/home/work/minigui/qvfb-1.0 # make
    (略过输出信息...)
    linux:/home/work/minigui/qvfb-1.0 # make install
    (略过输出信息...)
    出错记录:
    (4)在./configure时会报错:
    checking for libpng... -lpng -lz -lm
    checking for libjpeg6b... no
    checking for libjpeg... -ljpeg
    checking for Qt... configure: error: Qt (>= Qt 3.0.3) (headers and libraries) not found. Please check your installation!
    For more details about this problem, look at the end of config.log.
    由于在fc7在默认是没有完全安装qt的,所以需要安装一个软件,这个可以通过你的虚拟机加载fedora7的镜像文件,然后在fedora7的 cdrom中直接打开得到,即光盘下的feodra文件夹下的qt-devel-3.3.8-4.fc7.i386.rpm,点击安装
    步骤六:minigui演示:
    (1)进入/usr/local/etc/,将minigui.cfg修改为:
    system]
    # GAL engine
    gal_engine=qvfb  
    # IAL engine
    ial_engine=qvfb  
    mdev=/dev/mouse
    mtype=IMPS2
    [fbcon]
    defaultmode=1024x768-16bpp
    [qvfb]
    defaultmode=640x480-16bpp
    display=0
    (2)进入/etc/ld.so.conf.d建一个minigui.conf,文件的内容为/usr/local/lib
    最后要把系统共享库缓存刷新,将libminigui加载上,可以使用命令
    [root@fedora7]#ldconfig
    否则在运行应用程序时会报如下错:
    ./bomb
    ./bomb: error while loading shared libraries: libminigui-1.3.so.3: cannot open shared object file: No such file or directory
    (3)然后就可以使用qvfb体验miniGUI了,进入qvfb1.0根目录下的qvfb文件夹,输入下面命令:
    [root@fedora7]# qvfb &
    加上&符号使qvfb进程开启后shell立即返回,否则会阻塞shell进程,需要再开一个shell才可以运行minigui程序。qvfb 运行起来后在qvfb中设置虚拟显示器分辨率:File-->Configure,注意Size和Depth要设置的同MiniGUI.cfg中的分辨率和色深一致。
    (4)qvfb设置搞定后就可以运行mg-smaples-1.6.2/src中的例子了,运行一个helloworld试试效果
    [root@localhost minigui-pc]# cd mde-1.3.0
    [root@localhost mde-1.3.0]# cd bomb
    [root@localhost bomb]# ./bomb
    这时在qvfb界面上就OK了。也该睡觉了,晚安阿!
  • 你可能感兴趣的:(MiniGUI v1.3.3在PC上的配置和编译过程(常见问题解决方法))